2011-03-10 5 views
0

다른 언어로 된 RDF 리터럴을 가질 수있는 필드를 Lucene에서 인덱싱하려고합니다. 내가 지금까지 본 접근 방법의 대부분은 다음과 같습니다lucene에서 다국어 단어 인덱싱

  • 가 하나의 각 문서가 사용하는 각 언어 당 필드가 인덱스, 또는

  • 사용 M 인덱스, M은 수있는 사용 코퍼스 언어의

Lucene 2.9+에는 용어에 속성을 첨부 할 수있는 Payload라는 기능이 있습니다. 누구나이 메커니즘을 사용하여 언어 (또는 데이터 유형과 같은 다른 속성) 정보를 저장합니까? 성능이 두 가지 다른 접근 방식과 비교하면 어떻습니까? 소스 코드에서 포인터가 어떻게 수행되었는지 보여주는 것은 도움이됩니다. 감사.

답변

0

에 따라 다릅니다.

  1. 다음과 같은 것을 허용 하시겠습니까? "모든 영문 텍스트를 'foo'로 검색 하시겠습니까? 그렇다면 언어 당 하나의 필드가 필요합니다.
  2. 또는 "모든 텍스트에서 'foo'를 검색하고 일치하는 언어가있는 사용자를 표시 하시겠습니까?" 이것이 원하는 경우 페이로드 또는 별도 필드가 작동합니다.
  3. 다른 방법으로는 한 필드의 모든 텍스트를 인덱싱 한 다음 문서의 언어를 나타내는 다른 필드를 사용하는 것입니다. (각 문서가 단일 언어로되어 있다고 가정하십시오.) 그런 다음 검색은 +text:foo +language:english과 같을 것입니다.

효율면에서 : 모든 용어에 대해 언어 이름을 반복해야하고 페이로드 (적어도 쉽게)를 기반으로 검색 할 수 없기 때문에 페이로드를 피하려고합니다.

+0

사례 2를 원합니다. 사용자에게 리터럴 언어를 표시 할 수 있어야합니다. prefLabel이라는 필드가 있다면 lucene은 다른 언어, 즉 "email"^ en "email"^ fr과 유사한 레이블의 색인을 처리 할 수 ​​있습니까? 거꾸로 된 색인은 항목을 구별하기 위해 페이로드를 사용합니까? – fellahst

+0

@fellahst : 페이로드는 "당신이 용어에 붙이고 싶은 임의의 쓰레기"라고 생각할 수 있습니다. 검색자가이를 무시합니다. 당신은 결국 수동으로 그것을 밖으로 끌어낼 수 있습니다. – Xodarap

+0

페이로드를 질의 할 수있는 PayloadTermQuery 클래스가 있음을 발견했습니다. 검색자가 페이로드를 무시한다고 말할 때 내가 옳다고 주장하는지 확신 할 수 없습니다. – fellahst

0

기본적으로 lucene은 순위 알고리즘입니다. 문자열을보고 다른 문자열과 비교합니다. 서로 다른 문자 인코딩으로 인코딩 될 수 있지만 유사성은 동일하지 않습니다. SnowBallAnalyzer에 지원되는 langugage stemmer를로드하면 결과가 나타납니다. 스페인어 또는 중국어를 말합니다.