查询未返回正确的数据

时间:2017-10-16 09:58:44

标签: python python-3.x elasticsearch

下面是一个查询,该查询应返回当前日期名为“mike”的整个指定用户的所有信息。 (正如你所看到的那样,我正在使用通配符将所有用户称为mike,以及mike之后的任何名称,这是我想要的。)

因此,当前日期返回的数据很好,但是,通配符不起作用,它为所有用户带回的数据不仅仅是迈克。

有人可以帮助我,我真的需要使用通配符。

我的代码:

GET_search
    {
      "_source": [
        "N"
      ],
      "query": {
        "bool": {
          "should": [
            {
              "wildcard": {
                "N": "mike*"
              }
            }
          ],
          "must": [
            {
              "range": {
                "VT": {
                  "gte": "now/d",
                  "lte": "now+1d/d"
                }
              }
            }
          ]
        }
      }
    }

1 个答案:

答案 0 :(得分:1)

您的问题不是wildcard查询,而是它在should列表中的事实。在the bool query docs中,它说:

  

如果bool查询在查询上下文中并且具有must或filter子句,则文档将匹配bool查询,即使这些查询都不匹配。

这是你的情况。您可以通过将通配符查询移动到必须列表来解决此问题,如下所示:

{
  "_source": [
    "N"
  ],
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "VT": {
              "gte": "now/d",
              "lte": "now+1d/d"
            }
          }
        },
        {
          "wildcard": {
            "N": "mike*"
          }
        }
      ]
    }
  }
}

保留should并添加minimum_should_match为1也是有效的,但我想不出有任何理由这样做。