我尝试在Elasticsearch查询中将通配符与日期范围结合,但没有根据通配符搜索给出响应。它返回的响应包含日期范围不正确的项目。
{
"from": 0,
"size": 10,
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"wildcard": {
"hostName": "*abc*"
}
},
{
"range": {
"requestDate": {
"gte": "2019-10-01T08:00:00.000Z"
}
}
}
]
}
}
]
}
}
}
索引Map如下所示:
{
"index_history": {
"mappings": {
"applications_datalake": {
"properties": {
"query": {
"properties": {
"term": {
"properties": {
"server": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
},
"index-data-type": {
"properties": {
"attributes": {
"properties": {
"wwnListForServer": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"hostName": {
"type": "keyword"
},
"requestDate": {
"type": "date"
},
"requestedBy": {
"properties": {
"id": {
"type": "keyword"
},
"name": {
"type": "keyword"
}
}
}
}
}
}
}
}
2条答案
按热度按时间pftdvrlh1#
你错过了
minimum_should_match
参数,看看这个:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html。我认为你的查询应该看起来像这样:
来自文档:
可以使用minimum_should_match参数指定返回文档必须匹配的should子句的数量或百分比。
如果bool查询至少包含一个should子句,而不包含must或filter子句,则默认值为1。否则,默认值为0。
w8f9ii692#
根据您的Map,您必须调出
hostName
和requestDate
字段的完全限定属性。示例:此外,还可以考虑使用must子句将复合查询减少为仅主
bool
查询,并应用过滤器。示例:过滤器上下文对
_score
没有贡献,但它减少了hits
的数量。警告:在通配符查询中使用前导星号(*)可能会对查询的性能产生严重影响。