弹性必须匹配多个字段
我想获取必须包含 idfield &的文档。 名称值,&必须使用 datefield 使用排序
输入的日期范围过滤器:
idfield:多个值, namefield:相同的值, datefield:相同的日期范围,
实际格式:
datefield idfield namefield msgfield
实际语句:
2020-01-01 10:20:10 304 xyz msg1
2020-01-01 10:20:10 102 xyz msg2
2020-01-01 10:20:10 101 pqr msg3
......
2020-01-01 10:21:10 304 xyz msg4
2020-01-01 10:21:10 102 xyz msg5
......
当前查询在下面给出
查询:
{
"from": 0,
"size": 2000,
"sort": [
{
"datefield": {
"order": "asc"
}
},
{
"idfield.keyword": {
"order": "asc"
}
}
],
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"match": {
"idfield": "304"
}
},
{
"match": {
"namefield": "xyz"
}
},
{
"range": {
"datefield": {
"gte":"2020-01-01T10:20:10",
"lte":"2020-01-01T10:30:20"
}
}
}
]
}
},
{
"bool": {
"must": [
{
"match": {
"idfield": "102"
}
},
{
"match": {
"namefield": "xyz"
}
},
{
"range": {
"datefield": {
"gte":"2020-01-01T10:20:10",
"lte":"2020-01-01T10:30:20"
}
}
}
]
}
}
]
}
}
}
简称,(IDFIELD和NAMEFIELD和DATEFIELD范围)或(IDFIELD和NAMEFIELD和DATEFIELD范围)或等。
例如,(304和XYZ和(2020-01-01 10:20:20:20:20:10&GT) ; =,< = 2020-01-01 10:30:20))或(102 and xyz和(2020-01-01 10:20:10:10> =,< = 2020-01-01 10:30 :20))或等。
如何最小化/改进此查询
I want to fetch documents that must contains given idfield & namefield values, & must apply a date range filter with datefield with sorting
Inputs:
idfield: Multiple values,
namefield: Same value,
datefield: Same date range,
Actual format:
datefield idfield namefield msgfield
Actual statements:
2020-01-01 10:20:10 304 xyz msg1
2020-01-01 10:20:10 102 xyz msg2
2020-01-01 10:20:10 101 pqr msg3
......
2020-01-01 10:21:10 304 xyz msg4
2020-01-01 10:21:10 102 xyz msg5
......
The current query is given below
Query:
{
"from": 0,
"size": 2000,
"sort": [
{
"datefield": {
"order": "asc"
}
},
{
"idfield.keyword": {
"order": "asc"
}
}
],
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"match": {
"idfield": "304"
}
},
{
"match": {
"namefield": "xyz"
}
},
{
"range": {
"datefield": {
"gte":"2020-01-01T10:20:10",
"lte":"2020-01-01T10:30:20"
}
}
}
]
}
},
{
"bool": {
"must": [
{
"match": {
"idfield": "102"
}
},
{
"match": {
"namefield": "xyz"
}
},
{
"range": {
"datefield": {
"gte":"2020-01-01T10:20:10",
"lte":"2020-01-01T10:30:20"
}
}
}
]
}
}
]
}
}
}
In short, (idfield AND namefield AND datefield range) OR (idfield AND namefield AND datefield range) OR etc.
Ex, (304 AND xyz AND (2020-01-01 10:20:10 >=, <= 2020-01-01 10:30:20)) OR (102 AND xyz AND (2020-01-01 10:20:10 >=, <= 2020-01-01 10:30:20)) OR etc..
How to minimize/improve this query
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用术语查询它返回在提供字段中包含一个或多个确切条款的文档。以下查询将与您当前查询相同。
You can use terms query as it returns documents that contain one or more exact terms in a provided field. Below query will work same as your current query.