インデックスに次のようなドキュメントがあります。
{
  "field" : "a, b, c, d, e"
}
フィールド値は、配列から文字列への関数によって作成された文字列です。したがって、すべてのドキュメントが同じ文字列を持つわけではありませんが、すべてのドキュメントには少なくとも"a, b"as 値があります。
ここで、2 種類のドキュメントに一致するクエリが必要です。
フィールド値として(正確に) のみを持つドキュメント"a, b"、またはフィールドに少なくとも 2 つの検索語を含むドキュメント。
基本的に私の問題は、フィールドが分析されると最初の条件を満たせず、フィールドが分析されない場合は2番目の条件を満たさないことです。フィールドをnot_alanyzedとして複製しない解決策はありますか?
フィールドを分析されていないフィールド (コード例 field1) に複製すると、このクエリを使用できます。このクエリは達成するには複雑すぎるように感じます...:
{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "or": [
          {
            "term": {
              "field1": "a, b"
            }
          },
          {
            "and": [
              {
                "term": {
                  "field": "c"
                }
              },
              {
                "term": {
                  "field1": "d"
                }
              }
            ]
          }
        ]
      }
    }
  }
}