2009-07-27 2 views
5

Lucene 색인에 회사 필드가 있습니다. 색인 생성 된 회사 명 중 하나는 다음과 같습니다. Moody 'sLucene 색인에 아포스트로피가 포함 된 단어 저장

사용자가 다음 키워드 중 하나를 입력하면이 회사가 검색 결과에 나타나기를 바랍니다. 1.Moo 2.Mood 3.Moodys 4.Moody의

어떻게 루씬이 인덱스를 저장해야합니다 내가이 동작을 얻을 수 루씬 쿼리의 유형을 사용해야합니까?

감사합니다.

+0

대답은 나머지 색인을 작성하는 방식에 따라 달라집니다. 1. 복수형을 나타내야합니까? 즉 "Apple"과 "Apples"가 별개입니까? 2. 아포 스트로피를 유지 하시겠습니까? 아니면 지울 수 있습니까? 3. 회사 이름이 격리되었거나 큰 필드 안에 표시됩니까? –

+0

ur 의견을 주셔서 감사합니다 ... 내 응답 1.No 2. Lucene이 아포스트로피를 지키지 않기를 바랍니다. 3. 회사 명은 더 큰 분야 에서뿐만 아니라 isolted로 나타날 수도 있습니다 – Jimmy

답변

9

, 나는 두 가지로 질문을 분할하고, 차례로 각각 응답 할 :

  1. 을 어떻게 아포스트로피없이 유사한 단어에 해당로 아포스트로피 I 인덱스 단어? 예 : MoodysMoody 's 동일한 색인 용어에 매핑.
  2. Lucene에서 자동 완성 검색을 구현하려면 어떻게해야합니까? 즉, 색인이 있으면 단어 접두어를 사용하여 문서를 찾으십시오. map Moo to Moodys?

1은 상대적으로 쉽다 - 이전 단어로 아포스트로피와의 결합 토큰을 생성하기 위해 StandardToeknizer를 사용하여, 다음 StandardFilter가 아포스트로피와의를 제거 할 수 있습니다. 이것은 Moody 's를 Moody로 변환합니다. StandardAnalyzer은 더 많은 작업을 수행하며 (소문자 제거 및 중지 단어 제거) 필요 이상의 것일 수 있습니다. 줄기 사용은 MoodysMoody을 동일한 토큰으로 사용해야합니다. 이 경우 SnowBallFilter을 시도하십시오.

2가 더 어렵습니다. Alan이 언급 한 Lucene의 PrefixQuery은 회사 이름이 필드의 첫 단어 일 때만 작동합니다. this question about auto-complete in Lucene에 대한 답과 같은 것이 필요합니다.

1
StandardAnalyser, 나는 당신이되고 회사 이름을 기다리고있어 방법에 대해 생각 당신의 자신의 (복잡한) 텍스트 분석기를 작성하지 않고 1

2. 작동하지 않습니다하지만, 3, 4에 대한 작업을해야

을 찾아 보았다. 예를 들어, 기본 lucene 검색 구문을 사용하면 "Moo *"및 "Mood *"와일드 카드를 사용하여 검색하면 "Moody 's"를 찾을 수 있습니다. 따라서 lucene에 제출하기 전에 검색어에 "*"를 추가하는 것을 고려할 수 있습니다. 그러나 사용자가 후드에서 이러한 와일드 카드 추가를 인식하지 못하면 혼란을 야기 할 수 있습니다. 당신의 해명을 바탕으로