2017-02-22 8 views
3

제 환경에서는 elastic 5.1.1을 사용하고 있습니다. 필드 이름이 post_hashtags 인 문자열을 배열로 제안 suggester를 선택했습니다. 나는 접두사 "INV"를 다음과 같이 반응을 얻고있다어떻게 완료 suggester 사용할 때 중복없이 고유 한 제안을 얻을 수 있습니까?

필수 : ​​

POST hashtag/_search?pretty&&filter_path=suggest.hash-suggest.options.text,suggest.hash-suggest.options._source 
{"_source":["post_hashtags" ], 

"suggest": { 
    "hash-suggest" : { 
     "prefix" : "inv", 
     "completion" : { 
      "field" : "post_hashtags" 
     } 
    } 
} 

응답 : 같은 필드에 대한 입력 문자열도 있기 때문에

다음
{ 
    "suggest": { 
    "hash-suggest": [ 
     { 
     "options": [ 
      { 
      "text": "invalid", 
      "_source": { 
       "post_hashtags": [ 
       "invalid" 
       ] 
      } 
      }, 
      { 
      "text": "invalid", 
      "_source": { 
       "post_hashtags": [ 
       "invalid", 
       "coment_me", 
       "daya" 
       ] 
      } 
      } 
     ] 
     } 
    ] 
    } 

"무효"두 번 반환 "post_hashtags"다른 문서에서.

동일한 인덱스의 1000 개 문서에 동일한 "잘못된"입력 문자열이있는 경우 문제가 발생합니다. 그러면 엄청난 것이며 필요하지 않은 1000 개의 중복 된 제안이 생깁니다.

형식 완성 필드에 집계를 적용 할 수 있습니까?

중복 된 텍스트 필드 대신 고유 한 제안을 얻을 수있는 방법이 있습니까? 동일한 입력 문자열이 동일한 인덱스의 여러 문서에서 특정 필드에 지정된 경우에도 마찬가지입니까?

+0

이 답변은 도움이 될 수 있습니다 : http://stackoverflow.com/a/41800102/4604579 – Val

답변

1

아니요, 추천 결과를 중복해서 사용할 수 없습니다. Autocomplete suggester는 Elasticsearch 5에서 문서 지향적이므로 일치하는 모든 문서에 대한 제안을 반환합니다.

Elasticsearch 1 및 2에서 자동 완성 도구는 제안을 자동으로 중복 제거합니다. 열려있는 Github 티켓이 bring back this functionality에 있으며, 향후 버전에서는 possible to do so 인 것처럼 보입니다.

  1. 사용 Elasticsearch 버전 1 또는 2
  2. 를 사용하여 자동 완성 SUGGESTER를 기반으로 다른 제안 구현 : 지금은

    , 당신은 두 가지 옵션이 있습니다. 지금까지 보아온 반 공식적인 제안은 제안 문자열을 separate index에 넣는 것입니다.