2016-09-06 6 views

답변

3

동의어를 확장하는시기에 따라 다릅니다. 쿼리 시간에 확장하는 경우 다시 색인하지 않고 업데이트를 볼 수 있지만 인덱스 시간에 확장하는 경우 (권장 방법) 인덱스에 포함 된 새 동의어를 다시 색인해야합니다 .

시간을 쿼리에 비해 인덱스시 확장을 추천 뒤에 이유는 described in the old wiki입니다 :

쿼리시에 arrise 수있는 두 가지 잠재적 인 문제가 있기 때문입니다

:

는 루씬 QueryParser 흰색 토큰 화 분석기에 텍스트를 보내기 전에 공백을 넣으십시오. 따라서 사람이 sea biscit이라는 단어를 검색하면 분석기에 "sea"와 "biscit"이라는 단어가 별도로 주어지며 동의어와 일치하는지 여부를 알 수 없습니다.

구문 검색 (예 : "sea biscit")을 사용하면 QueryParser가 전체 문자열을 분석기로 전달하지만 SynonymFilter가 동의어를 확장하도록 구성된 경우 QueryParser가 결과 토큰 목록을 다시 가져올 때 분석기를 사용하면 원하는 효과를 내지 못하는 MultiPhraseQuery가 생성됩니다. 분석기에서 두 용어가 같은 위치를 차지한다는 제한된 메커니즘이 있기 때문입니다. "구문"이 용어와 동일한 위치를 차지한다는 것을 나타내는 방법이 없습니다. 예를 들어 결과물 인 MultiPhraseQuery는 문서에서 발생하는 "seabiscuit"의 간단한 경우와 일치하지 않는 "(sea | sea | seisciscuit) (biscuit | biscit)"이됩니다

멀티 - 단어 동의어, idf 차이점은 여전히 ​​색인 시간 동의어를 좋은 아이디어로 만듭니다.

검색어에 SynonymFilter를 TV, Televesion 및 expand = "true"로 사용하는 "text"필드가 포함 된 색인 "text : TV"라는 용어가 포함 된 수천 개의 문서가 " "text : Television"이라는 용어를 포함하는 수백 개의 문서 텍스트에 대한 쿼리 : TV가 (텍스트 : TV 텍스트 : 텔레비전)로 확장되고 docFreq가 텍스트 인 경우 : 텔레비전은 "텔레비전"과 많이 일치하는 문서를 제공합니다 높은 점수를 얻은 다음 "TV"에 필적하는 문서를 비교합니다. 이는 클라이언트에게 다소 직관적 일 수 있습니다. 색인 시간 확장 (또는 축소)은 원래 텍스트가 포함 된 용어와 상관없이 모든 문서에 대해 동일한 idf를 갖게됩니다.

Better synonym handling in Solr에서 실제로 사용할 수있는 장면에 대한 자세한 설명이 있습니다.

이러한 문제와 절충 사항을 알고있는 한 쿼리 시간 동의어를 사용하면 문제가 없을 수 있지만 검색어와 예상 결과에 대해 테스트해야합니다. 함정을 알고 있습니다.

+0

Thanks Mats. 수백만 개의 레코드를 다시 색인화하려면 시간이 많이 소요됩니다. –

+2

동의어에 의해 영향을받는 문서를 다시 색인하면됩니다. –

+0

@MatsLindh 문서에서 발생하는 "seabiscuit"의 간단한 경우와 일치하지 않는 "sea | sea | seabiscuit (biscuit | biscit)"행을 이해할 수 없습니다 . MultiPhraseQuery에는 "seabiscuit"이 있습니다. – user2478236