2017-02-22 3 views
3

私の環境では弾性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" 
       ] 
      } 
      } 
     ] 
     } 
    ] 
    } 

「無効」が2回返されます他のドキュメントの "post_hashtags"

同じインデックスの1000個の文書に同じ「無効な」入力文字列があると、1000個の重複した提案が膨大になり、必要ではないという問題があります。

タイプ補完のフィールドに集約を適用できますか?

同じインデックスの複数のドキュメントの特定のフィールドに同じ入力文字列がある場合でも、重複したテキストフィールドの代わりに一意の候補を得る方法はありますか?

+0

この回答は役に立ちました:http://stackoverflow.com/a/41800102/4604579 – Val

答えて

1

いいえ、提案の結果を重複させることはできません。 Autocomplete SuggesterはElasticsearch 5のドキュメント指向であり、一致するすべてのドキュメントの提案を返します。

「Elasticsearch 1」と「2」では、オートコンプリート・サジェッターが自動的に提案を重複除外しました。へのオープンGithubチケットがあり、将来のバージョンでpossible to do soのように見えます。今の

は、次の2つのオプションがあります:

  1. 使用Elasticsearchバージョン1または2
  2. オートコンプリートの提案者に基づいていない別の提案の実装を使用します。これまで私が見てきた唯一の正式な提案は、separate indexにあなたの提案文字列を入れることです。
関連する問題