나는 Lucene으로 인덱싱하고있는 List<String>
필드를 포함하는 최대 절전 모드 주석 클래스 TestClass
을 가지고 있습니다. 다음 예제를 고려하십시오.최대 절전 모드 목록에서 Lucene 검색
"Foo Bar"
및 "Bar Snafu"
은 특정 레코드에 대한 목록의 두 항목입니다. 이제 사용자가 "Foo Snafu"
에 대한 TestClass를 검색하면 해당 레코드가 발견됩니다. 토큰 Foo와 토큰 Snafu가 모두이 레코드의 List<String>
에있는 토큰이기 때문에 추측합니다.
어떻게 이런 일이 발생하지 않도록 할 수 있습니까?
실제 사례는 원고와 피고 명단이있는 법원의 경우입니다. 케이스에 기소 된 두 사람이 있다고 가정 해보십시오 (Joe Lewis Bob
및 Robert Clay Smith
). 이러한 사용자는 피고의 목록에있는 법원 사건 기록에 저장됩니다. 이 피고들의 목록은 Lucene과 함께 색인되어 있습니다. 이제 사용자가 앞서 언급 한 두 명의 피고 중 하나를 검색하면 사례가 발견됩니다. 사용자가 Lewis Smith
또는 Joe Clay
을 검색하는 경우에도 해당 사례가 발견됩니다.
업데이트 : Lucene IRC 채널에서 다중 값 필드를 사용할 수 있다고 언급되었습니다.
업데이트 2 :은 그것은 내가 SOLR으로 이러한 목표를 달성하기 위해 schema.xml
에 positionIncrementGap
설정을 사용할 수 SOLR의 IRC 채널에서 언급되었다. 분명히 문구 쿼리 (슬롭 포함 또는 불포함)를 사용하면 "증가 간격이 동일 필드의 다른 값이 의도하지 않은 일치를 발생시키지 않도록합니다".
'foo bar'와 'bar snafu'가 다른 엔티티 인 경우 ... [i] .. 'i'가 카운터 변수 인 경우 ... 'foo bar'만 가리키고 '및'bar snafu '전체적으로 ...'foo snafu '는 엔티티로 존재하지 않습니다 ... 귀하의 질문을 이해하는 한, 이것은 내가 말할 수있는 것입니다. 어쩌면 더 자세히 설명 할 수 있을까요? – Philo
@Philo 오른쪽.하지만 Lucene은 모든 이름을 토큰 화합니다. – theblang