2010-05-27 2 views
1

"aaa.bbb.ddd-fff"와 같은 참조 번호가 포함 된 많은 문서를 색인화해야합니다. 구조는 바뀔 수 있지만 항상 "/", "-", "_"또는 다른 구분 기호와 결합 된 임의의 숫자 또는 문자입니다.Lucene에서 "aaa.bbb.ddd-fff"와 같은 문자열을 색인하는 방법은 무엇입니까?

사용자는 "aaa"또는 "ddd"와 같은 하위 문자열과 "aaa.bbb"또는 "ddd-fff"와 같은 조합을 검색 할 수 있기를 원합니다. 내가 얻을 수 있었던 최선의 방법은 각 입력에 대해 여러 용어를 뱉어내는 "Lucene in action"에서 동의어 필터를 모델로 만든 자체 토큰 필터를 만드는 것입니다. 제 경우에는 "aaa.bbb", "bbb.ddd", "bbb.ddd-fff"및 하위 문자열의 다른 모든 조합을 반환합니다. 이것은 꽤 잘 작동하지만, 많은 문자열을 포함하는 큰 문서 (100MB)를 인덱싱 할 때 필자의 필터는 각 입력 문자열에 대해 여러 용어를 반환하기 때문에 메모리 예외를 벗어나는 경향이 있습니다.

이러한 문자열을 더 효과적으로 인덱싱 할 수 있습니까?

답변

0

내가 토큰 필터를 구축하려고합니다 :

  1. 추출물은 예를 들어, 구분 기호에 의해 구분 된 토큰을 aaa, bbb, ddd, fff.
  2. 구분 기호를 별도의 토큰으로 추출합니다.
  3. 교차 숫자 일치를 방지하기 위해 구분 기호 토큰을 추가 할 수 있습니다.

쿼리의 경우 먼저 용어를 사용해야하는 부울 쿼리를 시도합니다. 위양성 검사가 너무 많으면이 항목을 반드시 MUST로 변경합니다. 이것이 여전히 너무 많은 경우 PhraseQuery를 시도 할 것입니다.

관련 문제