下面是一个查询,该查询应返回当前日期名为“mike”的整个指定用户的所有信息。 (正如你所看到的那样,我正在使用通配符将所有用户称为mike,以及mike之后的任何名称,这是我想要的。)
因此,当前日期返回的数据很好,但是,通配符不起作用,它为所有用户带回的数据不仅仅是迈克。
有人可以帮助我,我真的需要使用通配符。
我的代码:
GET_search
{
"_source": [
"N"
],
"query": {
"bool": {
"should": [
{
"wildcard": {
"N": "mike*"
}
}
],
"must": [
{
"range": {
"VT": {
"gte": "now/d",
"lte": "now+1d/d"
}
}
}
]
}
}
}
答案 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也是有效的,但我想不出有任何理由这样做。