2014-04-20 2 views
1

목표 퍼지 검색의 기반으로 : 퍼지 검색, 그 유사한 용어 젠드 루씬 - 와일드 카드 검색

나는 순간에 장소에서 부울 쿼리를

와 다음 와일드 카드 검색을, 아래 :

$query = new Zend_Search_Lucene_Search_Query_Boolean(); 

$pattern = new Zend_Search_Lucene_Index_Term("*$string*"); 
$subquery1 = new Zend_Search_Lucene_Search_Query_Wildcard($pattern); 

$term = new Zend_Search_Lucene_Index_Term("$string"); 
$subquery2 = new Zend_Search_Lucene_Search_Query_Fuzzy($term); 

$query->addSubquery($subquery1, null /* optional */); 
$query->addSubquery($subquery2, null /* optional */); 

$hits = $index->find($query); 

이것은/또는 검색 중 하나를 실행하는 것으로 보입니다. 예를 들면 : 나는 제목에 어디서나 "베리"에 모든 것을 공격

"berry" 

용어를 검색하면 내가

"bery" 

을 검색하는 경우

berry, wild berry, strawberry, blueberry 

는하지만 결과 만 명중 like

berry 

나는 퍼지 검색에 전원이 공급되는 방법을 정확히 알지 못합니다. 퍼지 검색이 유사한 용어를 반환 한 후에 와일드 카드 검색을 수행 할 수 있도록 내 쿼리를 수정하는 방법이 있습니까?

답변

2

색인을 생성 할 때 해당 필드가 분석되지 않은 것으로 판단됩니다.

따라서 첫 번째 쿼리에서 와일드 카드 쿼리에서 조회가 발생하고 있습니다. *berry*은 사용자가 제공 한 모든 예와 일치합니다. *bery*은 실제 어떤 문서의 부분 문자열이 아니기 때문에 어떤 문서와도 일치하지 않습니다.

퍼지 쿼리의 경우 용어는 편집 거리 (Damerau–Levenshtein distance)로 비교됩니다. 편집 거리는 2로 매치의 기본 최대 값입니다.

  • beryberry로 - 편집 거리 : 1
  • berywild berry로 - 편집 거리 : 6
  • berystrawberry로 - 편집 거리 : 6
  • beryblueberry로 - 편집 거리 : 5

이것은 부분적으로 분석기를 사용하여 처리 할 수 ​​있습니다. 전체 문자열을 단일 토큰으로 색인화합니다. 표준 분석기는 wild berry을 토큰 wildberry으로 나눠서 퍼지 (fuzzy) 일치를 기대할 수 있습니다.

딸기와 블루 베리까지 분석기가 strawberry을 어떻게 든 분리하지 않는 한, SynonymFilter을 분석기에 통합하여 분리 할 용어를 수동으로 지정할 수 있습니다.

또 다른 옵션은 루씬의 SpellChecker

+0

대 답을 사용하여 검색하기 전에 쿼리 맞춤법을 수정하려고하는 것입니다. 나는 이것들을 조사 할 것이다. 고맙습니다. –