문제

Zend Lucene을 사용하여 PHP 웹 사이트에 대한 검색 기능을 구축하고 있으며 문제가 있습니다. 내 웹 사이트는 상점 감독입니다 (그런 것).

예를 들어 "Foobar"라는 상점이 있지만 방문객들은 "Foo Bar"를 위해 Seach를 통해 결과를 얻습니다. 또한 상점의 이름이 "foo bar"이고 방문자가 "foobar"를 설치하는 경우 아무것도 찾을 수 없습니다.

나는 "foobar ~"(퍼지 Seach)를 위해 Seach를 시도했지만 "Foo Bar"라는 기사를 찾지 못했습니다.

인덱스를 구축하거나 쿼리를 만드는 사후 방법이 있습니까?

도움이 되었습니까?

해결책

옵션 1 : 입력 쿼리 문자열을 다양한 지점에서 두 부분으로 나누고 검색하십시오. 예를 들어. 이 경우 쿼리는 ( +fo +bar) 또는 ( +foo +bar) 또는 ( +foob +ar)입니다. 문제는이 토큰화가 입력 쿼리 문자열에 두 개의 토큰이 있다고 가정합니다. 또한 ( +foob +ar)의 결과와 같은 추가, 아마도 관련이없는 결과를 얻을 수 있습니다.

옵션 2 : 색인화 및 쿼리 중에 N-Gram 토큰 화를 사용합니다. "foo bar"에 대한 토큰을 색인화하는 것은 fo, oo, ba, ar입니다. foobar로 검색하는 동안 토큰은 fo, oo, ob, ba, ar입니다. 운영자로 검색하면 최대 N- 그램 일치가있는 문서가 제공됩니다. 이것은 달성 될 수 있습니다 ngramtokenizer

다른 팁

대부분의 일반적인 이름 혼란에 대한 인덱스 항목을 수동으로 추가하십시오. 고객이 특별한 형태로 입력하도록하십시오.

"*foo*및*bar*"또는 "*foo*또는*bar*"를 시도 했습니까? 그것은 흰 족제비에서 작동하며 Lucene을 기반으로한다는 것을 읽습니다.

성능에 신경 쓰지 않으면 WildCardQuery를 사용하십시오 (성능이 상당히 악화됨) :

new WildcardQuery( new Term( "propertyName", "Foo?Bar" ) );

0 개 이상의 문자의 경우 '*'를 0 또는 한 문자로 사용하십시오. ''? '

성능이 중요하다면 BooleanQuery를 사용해보십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top