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

时间:2014-04-15 13:42:11

标签: elasticsearch

我想知道是否有可能将两种查询类型组合在一起,在我的情况下我需要匹配通配符查询,每个查询都必须在不同的情况下运行字段。

问题是,如果实体名称(文档是实体的表示)与搜索项末尾的通配符匹配,则文档匹配,如果它与其中一个完全匹配,则匹配实体的同义词。不是两个查询都必须匹配,只有其中一个要将文档视为相关。

目前我需要两个请求来存档:

通配符:

GET /name/type/_search
{
   "query": {
      "wildcard": {
         "name": {
            "value": "term*",
            "boost": 2
         }
      }
   }
}

匹配度:

GET /name/type/_search
{
   "query": {
      "match": {
         "synonyms": "term"
      }
   }
}

有一种方法可以使用一个请求吗?我的所有测试都失败了。

1 个答案:

答案 0 :(得分:4)

这是你正在寻找的......

curl -XPOST "http://localhost:9200/try/_search" -d'
{
  "query": {
    "bool": {
      "should": [
        {
          "wildcard": {
            "name": {
              "value": "term*",
              "boost": 2
            }
          }
        },
        {
          "match": {
            "synonyms": "term"
          }
        }
      ]
    }
  }
}'