2009-09-15 1 views
2

Lucene 쿼리에서 앰퍼샌드와 단어 "and"를 처리하는 방법에 대한 조언을 찾고 있습니다. 내 테스트 쿼리 (따옴표 포함)됩니다Lucene.NET - "and"가 포함 된 구문 검색

  • "석유와 가스 필드"(완전한 구)
  • "연구 개발"(완전한 구)
  • "R & D"(완전한 구)

이상적으로는 입력이 사용자에게서 오는 것처럼 QueryParser을 사용하고 싶습니다.

테스트 및 문서를 읽는 동안 StandardAnalyzer을 사용하는 것이 내가 원하는 것에 적합하지 않음을 발견했습니다. 처음 두 검색어의 경우 QueryParser.Parse은 다음과 같이 변환합니다.

contents:"oil gas field" 
contents:"research development" 

내가 원하는 바가 없습니다. . 내가 대신 PhraseQuery를 사용하는 경우, 나는이 SimpleAnalyzer를 사용하는 경우 아마도 "와"인덱싱되지 않기 때문에

, 나는이 문구를 찾을 수 있습니다 (어떤 결과를 얻을 수 없지만 QueryParser.Parse는 마지막 학기를 변환 :

contents:"r d" 

다시, 내가 찾고되지 확실히 무엇을 어느.

어떤 조언을?

답변

3

검색 할 경우 "와"당신은 인덱스 여기에 있습니다. 당신이 분석기를 소유하거나 제거 쓰기 " 및 "중지 단어 목록에서. ame는 "r & d"에 적용됩니다. "r", "d", "r & d"텍스트에서 3 단어를 생성하는 자체 Analyzer를 작성하십시오.

3

Lucene과 함께 작업하는 첫 단계는 색인 생성시 거의 모든 작업이 완료된다는 것입니다. 무언가를 검색하려면 색인을 생성하십시오. 당신이 무언가를 무시하고 싶다면 당신은 그것을 색인하지 않는다. 이것은 Lucene이 고속 검색을 제공 할 수있게 해줍니다.

결과적으로 인덱스가 효과적으로 작동하려면 분석기가 수행해야 할 작업을 미리 예상해야합니다. 이 경우에는 스톱 워드를 제거하지 않고 '및'(그리고 선택적으로 @를 'at'등으로) 변환하는 자체 분석기를 작성합니다. r & d 일치하는 연구 & 개발의 경우 거의 확실하게 일부 도메인 특정 논리를 구현해야 할 것입니다.

이 문제를 처리하는 다른 방법이 있습니다. 문구 검색과 일반적인 키워드 검색을 구분할 수 있다면 여러 유형의 검색을 처리하기 위해 둘 이상의 색인을 유지 관리 할 수있는 이유가 없습니다. 이것은 매우 빠른 검색을 제공하지만 더 많은 유지 관리가 필요할 것입니다.

또 다른 옵션은 위양성을주지 않는 분석기를 사용하여 Lucene의 빠른 속도를 사용하여 초기 결과를보다 관리하기 쉬운 것으로 필터링하는 것입니다. 그런 다음 올바른 문구와 일치하는 문서의 전체 텍스트에 대해 세부적인 필터링을 실행할 수 있습니다.

궁극적으로 나는 Lucene이 속도를 제공하기 위해 고급 검색에서 정확도를 희생한다는 것을 알게 될 것이라고 생각합니다. 일반적으로 대부분의 사람들에게 충분합니다. 분석기를이 정도로 조정하려고하는 미지의 바다에 아마 계실 것입니다.