2013-06-10 2 views
1

자동 완성 이름을 원합니다. 우리가 이름 John Smith이있는 경우자동 완성 이름 분석기

예를 들어, 나는 JoSmJohn Sm이 문서를 다시 얻기 위해 검색 할 수 있어야합니다.

또한 jo sm이 문서와 일치하지 않기를 바랍니다. 이와

return array(
    'settings' => array(
     'index' => array(
      'analysis' => array(
       'analyzer' => array(
        'autocomplete' => array(
         'tokenizer' => 'autocompleteEngram', 
         'filter' => array('lowercase', 'whitespace') 
        ) 
       ), 

       'tokenizer' => array(
        'autocompleteEngram' => array(
         'type' => 'edgeNGram', 
         'min_gram' => 1, 
         'max_gram' => 50 
        ) 
       ) 
      ) 
     ) 
    ) 
); 

문제는 edgengrams를 사용하여 토큰 화 먼저 우리가 다음 텍스트를 분할한다는 것입니다 :

나는 현재이 분석기가 있습니다.

이이 결과 : 나는 john smith 또는 john sm에 대해 아무것도 반환되지 것입니다 검색하면 jjojohjohnssmsmismitsmith

이것은 의미한다.

그래서, 나는 다음과 같이 토큰을 생성 할 필요가 : jjojohjohnssmsmismitsmithjohn sjohn smjohn smijohn smitjohn smith.

이러한 추가 토큰을 생성하도록 분석기를 설정하려면 어떻게해야합니까?

답변

4

나는 edgengram을 사용하지 않았다.

standard 토크 나이저 및 standardlowercase 필터가있는 분석기를 만들었습니다. 이것은 실질적으로 standard 분석기와 동일하지만 스톱 워드 필터가 없습니다 (우리는 결국 이름을 검색하고 The 또는 An 등이있을 수 있습니다).

그러면 위의 분석기를 index_analyzersimplesearch_analyzer으로 설정합니다. match_phrase_prefix 쿼리와 함께이 설정을 사용하면 정말 잘 작동합니다.

은 내가 사용하는 사용자 정의 분석기 (자동 완성 전화를 PHP로 표현)된다

'autocomplete' => array(
         'tokenizer' => 'standard', 
         'filter' => array('standard', 'lowercase') 
       ), 
+1

가 더 조금 정교한? json 설정을 공유해 주시겠습니까? –

+1

@ GuidoGarcía 내 대답이 업데이트되었습니다 :) – F21