elasticsearch bool クエリは OR と組み合わせて使用​​する必要があります 質問する

elasticsearch bool クエリは OR と組み合わせて使用​​する必要があります 質問する

現在、Solr ベースのアプリケーションを Elasticsearch に移行しようとしています。

次の Lucene クエリがあります:

(( 
    name:(+foo +bar) 
    OR info:(+foo +bar) 
)) AND state:(1) AND (has_image:(0) OR has_image:(1)^100)

私の理解する限り、これはmustブール値と組み合わせた句の組み合わせですOR

を含むすべてのドキュメントを取得します(foo AND bar in name) OR (foo AND bar in info)。その後、条件で結果をフィルタリングしstate=1、画像を含むドキュメントをブーストします。

bool クエリを使用しようとしましたが、ブール値を句にmust取り込むことができません。次のようになります。ORmust

GET /test/object/_search
{
  "from": 0,
  "size": 20,
  "sort": {
    "_score": "desc"
  },
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "foo"
          }
        },
        {
          "match": {
            "name": "bar"
          }
        }
      ],
      "must_not": [],
      "should": [
        {
          "match": {
            "has_image": {
              "query": 1,
              "boost": 100
            }
          }
        }
      ]
    }
  }
}

ご覧のとおり、mustの条件がinfo欠落しています。

** アップデート **

elasticsearch クエリを更新し、その関数スコアを削除しました。基本的な問題はまだ残っています。

ベストアンサー1

  • ORは次のように綴られるべきである
  • ANDはmustと綴られる
  • NORはmust_notと綴られる

例:

(丸くて(赤または青))に該当するすべてのアイテムを表示します。

    {
        "query": {
            "bool": {
                "must": [
                    {
                        "term": {"shape": "round"}
                    },
                    {
                        "bool": {
                            "should": [
                                {"term": {"color": "red"}},
                                {"term": {"color": "blue"}}
                            ]
                        }
                    }
                ]
            }
        }
    }

OR のより複雑なバージョンも実行できます。たとえば、5 つのうち少なくとも 3 つを一致させたい場合は、「should」の下に 5 つのオプションを指定し、「minimum_should」を 3 に設定できます。

以前の私の巣作りがうまくいかなかった部分を見つけてくれた Glen Thompson と Sebastialonso に感謝します。

ElasticSearch バージョン 6 では「term」が「match」になることを指摘してくれた Fatmajk にも感謝します。

おすすめ記事