在查询参数中传递_type与在弹性搜索中传递URL

时间:2019-09-25 05:00:09

标签: elasticsearch

我正在尝试查询弹性搜索集群。 索引名称为titles,_ type为title。当我将类型输入请求URL时,过滤将按预期进行:

POST http://esendpoint.com/titles/title/_search?

身体:

"query": {
    "filtered": {
      "query": {

        "bool": {
          "should": [
            {  "term" : {"_docTitleIds" : "65d-7ab2-41d4-a928-300accfc8ab7"}}
          ]
        }
      }

    }
  }

但是,如果我在查询正文中而不是在URL中添加_type标题,则所有结果均在索引titles下。但是在URL中使用时,我只能从title

类型获得结果

POST http://esendpoint.com/titles/_search

身体:

"query": {
        "filtered": {
          "query": {

            "bool": {
              "should": [
                {  "term" : {"_type" : "title"}},
                {  "term" : {"_docTitleIds" : "65d-7ab2-41d4-a928-300accfc8ab7"}}
              ]
            }
          }

        }
      }

我无法理解为什么会这样。

1 个答案:

答案 0 :(得分:0)

您需要使用filter(与)而不是should(或):

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "_type": "title"
              }
            },
            {
              "term": {
                "_docTitleIds": "65d-7ab2-41d4-a928-300accfc8ab7"
              }
            }
          ]
        }
      }
    }
  }
}

以下查询适用于ES 2和更高版本:

{
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "_type": "title"
          }
        },
        {
          "term": {
            "_docTitleIds": "65d-7ab2-41d4-a928-300accfc8ab7"
          }
        }
      ]
    }
  }
}