ElasticSearch、フィルターを使用したマルチマッチ? 質問する

ElasticSearch、フィルターを使用したマルチマッチ? 質問する

ES に複数一致クエリがあり、フィルターを追加したいと考えています。

{
  "multi_match" : {
    "query" : "this is a test",
    "fields" : [ "subject^2", "message" ]
  }
}

このフィルターを追加するための構文は何ですか?

私は試した:

{
  "multi_match" => {
    "query" => "list",
    "fields" => [ "username" ]

  },
"filter" => {
        "term" => { "username" => "slimkicker"}
    }
}

ベストアンサー1

必要に応じて、フィルターを適切な位置に配置する必要があります。次の 2 つのオプションがあります。

トップレベルのフィルターを使用し、フィルターを検索結果にのみ適用し、ファセットには適用しません。

{
    "query" : {
        "multi_match" : {
            "query" : "this is a test",
            "fields" : [ "subject^2", "message" ]
        }
    },
    "filter" : {
        "term" : { "username": "slimkicker" }
    }
} 

フィルタークエリを使用して、検索結果とファセットの両方にフィルターを適用します。

{
    "query" : {
        "filtered" : {
            "query" : {
                "multi_match" : {
                    "query" : "this is a test",
                    "fields" : [ "subject^2", "message" ]
                }
            },
            "filter" : {
                "term" : { "username": "slimkicker" }
            }
        }
    }
}

おすすめ記事