Elasticsearch在一个请求中组合了两种不同的查询类型

时间:2015-10-28 15:40:27

标签: php search elasticsearch bigdata

我想知道是否有可能组合两种查询类型,在我的情况下我需要一个queryString和过滤查询,每个都必须在不同的字段上运行。 过滤的查询获取$postids中的所有记录 post_id的$postids:multiple值 查询字符串用于搜索文本中的单词 目前我需要两个请求来存档: 查询已过滤:

GET /myindex1/tweecoms/_search
{
"query" : {
        "filtered" : {
            "filter" : {
                "terms" : {
                    "post_id" : ['.$postids.']
                }
            }
        }
}

query String:

GET /myindex1/tweecoms/_search{
 "query": {
                   "query_string": {
                        "query": "*' . $sujet . '*",
                        "lenient": true
                    }
                    }
}

我尝试将它结合起来

GET /myindex1/tweecoms/_search

{
  "query": {
    "bool": {
      "should": [
        {
           "query_string": {
                        "query": "hhhh",
                        "lenient": true
                    }
        },
        {
          "filtered" : {
            "filter" : {
                "terms" : {
                    "post_id" : [0,157]
                }
            }
        }
        }
      ]
    }
  }
}`

但我尝试只运行查询字符串

1 个答案:

答案 0 :(得分:0)

我认为你需要在filtered子句中编写查询。 This会帮助您理解。 试试这个

{
  "query": {
    "filtered": {
      "query": {
        "query_string": {
          "query": "keyword"
        }
      },
      "filter": {
        "terms": {
          "post_id": [0,157]
        }
      }
    }
  }
}

您的查询的问题是您正在使用should子句,该子句将选择具有给定查询字符串的文档或具有给定post_ids的文档。您可以将should替换为must,并获得预期结果。

您还可以在查询中使用minimum_should_match参数

我希望这会有所帮助