gpt4 book ai didi

elasticsearch - 查询 ElasticSearch - 在不同时间匹配的多个术语

转载 作者:行者123 更新时间:2023-12-02 23:55:05 25 4
gpt4 key购买 nike

一直在为如何做到这一点而绞尽脑汁,但无法提出解决方案。希望堆栈可以提供帮助。

我有一个标识符(我们称之为对象 id - OID)是:

1) 用于跟踪交易链;
2) 不保证在 5 分钟间隔之外是唯一的。


用英语“我想获取所有文档:(在时间 x 和 y 之间有 oid1 的数据)或(在时间 w 和 z 之间有 oid2 的数据)或 ....”

因为我正在处理大量数据(并且希望避免每个 OID 进行 1 次查询),所以我想做的是获取 OID 列表,为每个 OID 设置时间限制,然后一次查询 ES。我认为我能做的是:

    {
"query": {
"bool": {
"should": [
{
"match_phrase": {
"oid": "12ac419512ac4195"
},

"range": {
"startTime": {
"from": "2019-01-04T21:31:00.000Z",
"to": "2019-01-04T21:34:00.000Z"
}
}

},

{
"match_phrase": {
"oid": "34df261834df2618"
},

"range": {
"startTime": {
"from": "2019-01-04T21:35:00.000Z",
"to": "2019-01-04T21:40:00.000Z"
}
}

}

],
"minimum_should_match": 1
}
}
}

只要我删除时间(“我想获取 oid1 或 oid2 或 oid2”),它就可以正常工作,但在时间范围内,它似乎让 ES 不高兴。

有没有办法做到这一点?或者我是否坚持每个 OID 一个查询。

最佳答案

您需要另一个子级别的 bool + must 子句将匹配 + 范围绑定(bind)在一起。

{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"match_phrase": {
"oid": "12ac419512ac4195"
}
},
{
"range": {
"startTime": {
"from": "2019-01-04T21:31:00.000Z",
"to": "2019-01-04T21:34:00.000Z"
}
}
}
]
}
},
{
"bool": {
"must": [
{
"match_phrase": {
"oid": "34df261834df2618"
}
},
{
"range": {
"startTime": {
"from": "2019-01-04T21:35:00.000Z",
"to": "2019-01-04T21:40:00.000Z"
}
}
}
]
}
}
]
}
}
}

关于elasticsearch - 查询 ElasticSearch - 在不同时间匹配的多个术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54171003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com