2009-10-08 6 views
1

데이터베이스에서 채워지는 Lucene 색인이 있습니다. 일부 필드를 저장/색인화 한 다음 다른 모든 필드의 내용을 색인화하는 FullText 필드를 추가하여 일반 검색을 수행 할 수 있습니다. 이제Lucene - 다른 필드에서 여러 용어 검색

의 나는 다음과 같은 두 개의 필드가있는 문서가 있다고 가정 해 봅시다 : FLD1을 - FLD2 "삼성은 새로운 22 인치 LCD 화면이 출시"- 사용자가 작업을 수행

경우 "소니 에릭슨 휴대 전화의 배터리가 폭발" "삼성 전화"는 아마 삼성의 전화에 관한 뉴스를 원한다. 삼성의 스크린과 소니 폰에 대한 정보는 아니지만 FullText 필드로 검색하면 유효한 결과를 얻는다. 이것을 처리하는 좋은 방법이 있습니까?

좀 구분하여 색인 생각하고 한 일을 SpanNotQuery, 전체 텍스트 필드는이 내용을했을 있도록 : "삼성은 새로운 22 인치 LCD 화면 MYLUCENESEPARATOR 소니 에릭슨 휴대 전화의 배터리가 폭발 출시"다음 일을 스팬 기간이 아닌 MYLUCENESEPARATOR가있는 SpanNotQuery.

좋은 해결책입니까? 두 개 이상의 용어로 잘 확장됩니까? 나는 그것이 성능 희생자가 될 것을 두려워한다. 이것을 달성하기위한 더 좋은 방법이 있습니까?

답변

2

필드 수가 제한되면 두 개의 설명 필드를 두 개의 다른 필드에 넣을 수 있습니다. 그런 다음 MultiFieldQueryParser을 사용하여이 필드를 검색 할 수 있습니다. 이 두 필드는 서로 다른 필드이므로 두 필드가 AND 연산자로 단일 필드에 나타나는 경우에만 문서가 일치합니다.

예를 들어 보겠습니다. FLD1이 - FLD2 "삼성은 새로운 22 인치 LCD 화면 출시"- 다음은 & FLD2를 FLD1 별도의 필드에 색인 경우

"소니 에릭슨 휴대 전화의 배터리가 폭발을"쿼리가된다

(+fld1:samsung +fld1:phone) (+fld2:samsung +fld2:phone) 

Multifield 쿼리를 사용하면 이러한 쿼리를 쉽게 구성 할 수 있으므로 여러 필드에 대해 쿼리를 반복하지 않아도됩니다.

+0

답변을 수락했지만 투표를 잊어 버렸습니다. 아마도 조금 늦었 겠지만 지금은 그랬어 :-) – raven

+0

감사합니다, Jaime. –