2017-06-10 8 views
2

正確に配列を一致させる方法を探しています。Elasticsearchで複数の値を正確に検索する

例文書:

{"id": 1, "categories" : ["A", "C","E"]} 
{"id": 2, "categories" : ["A", "C"]} 
{"id": 3, "categories" : ["C", "A"]} 

私は「A」と「C」で検索すると、それが唯一の第一及び第三の文書を返します

{"id": 1, "categories" : ["A", "C","E"]} 
{"id": 2, "categories" : ["A", "C"]} 

第三1が返されるべきではありません順序が一致しないためです。

私は、次のクエリを試してみましたが、それは考慮して順番を取ることはありませんので、それはまだ第三の文書を返します。

{ 
    "sort": [ 
     { 
     "modified": { 
      "order": "desc" 
     } 
     } 
    ], 
    "query": { 
     "bool": { 
     "filter": { 
      "bool": { 
      "must": [ 
       { 
       "term": { 
        "categories": "A" 
       } 
       }, 
       { 
       "term": { 
        "categories": "C" 
       } 
       } 
      ] 
      } 
     } 
     } 
    } 
    } 

私はこの正確な順序の検索を提供したい、50個の以上のフィールドを持っていますカテゴリ ":" "、" categorieskey ":" cd "というキーワードを使用して、" AC " }

他の方法がありますか?

+1

カテゴリ配列データ型ではなく、多値フィールドでもあり、これらの値の明示的な順序はありませんので、実際に問題を再考する必要があります。 – Mysterion

+1

おそらく最も良い方法はこれらを格納することです小文字の文字列値を比較して比較します。 –

答えて

5

あなたはので、そのcategorieskeyフィールドを追加する必要があります。それは、検索に来るとき、これは最高のパフォーマンスを与える必要があります

  • 。フィールド内の正確な値を一致させるだけです(基本的にはtermフィルタ、何も複雑ではありません)
  • 私はこのための簡単な方法はないと思います。 categorieskey Elasticsearchはこれらの用語の順序を知る方法がありません。そして_sourceで検索/フィルタを実行するためには、多くのリソースを使用して検索が先に行くANそのフィールドを追加し、すべてのすべてのすべての

で、高速ではありません、これは私の意見では最良の方法痛いです。

関連する問題