gpt4 book ai didi

elasticsearch - Elasticsearch查询-返回没有相应文档的所有文档

转载 作者:行者123 更新时间:2023-12-02 22:32:36 24 4
gpt4 key购买 nike

我有一个索引,其中包含具有状态的文档。这些最初是通过作业导入的,其状态设置为0。

为简单起见:

{
"_uid" : 1234
"id" : 1
"name" : "someName",
"status" : 0
}

然后,另一个迭代作业通过遍历状态= 0的每个对象来运行并扩展这些对象。扩展的每个对象的状态均为1。
{
"_uid" : 1234
"id" : 1
"name" : "someName",
"newProperty" : "someValue",
"status" : 1
}

(请注意未更改的_uid。它是同一对象)

现在,我进行了第三项导入作业,该作业将获取状态为1的所有对象,并获取其ID(ID!
{
"_uid" : 5678
"id" : 1
"completelyDifferentProperty" : "someValue"
"status" : 2
}

所以现在,对于每个ID,我有两个对象:一个状态为1,一个状态为2。

对于最后一项工作,我需要确保它仅选择状态为= 1且尚未具有相应状态为2的对象的对象。

所以我需要查询的效果
“获取状态== 1且不存在状态== 2具有相同ID的对象的所有对象”。

我感觉聚合可能会帮助我,但我还没有弄清楚。

最佳答案

您可以使用parent/child relationship轻松完成此操作。这是该功能的一种特殊情况,但我认为可以用来解决您的问题。

为了进行测试,我使用parent_doc类型和child_doc类型设置了这样的索引(我仅包括设置功能所需的属性;在文档中添加更多内容也没有什么坏处):

PUT /test_index
{
"mappings": {
"parent_doc": {
"_id": {
"path": "id"
},
"properties": {
"id": {
"type": "long"
},
"_uid": {
"type": "long"
},
"status": {
"type": "integer"
}
}
},
"child_doc": {
"_parent": {
"type": "parent_doc"
},
"_id": {
"path": "id"
},
"properties": {
"id": {
"type": "long"
},
"_uid": {
"type": "long"
},
"status": {
"type": "long"
}
}
}
}
}

然后,我添加了四个文档;三个 parent ,一个 child 。有一个文档的 "status: 1没有相应的子文档。
POST /test_index/_bulk
{"index":{"_type":"parent_doc"}}
{"_uid":1234,"id":1,"name":"someName","newProperty":"someValue","status":0}
{"index":{"_type":"parent_doc"}}
{"_uid":1234,"id":2,"name":"someName","newProperty":"someValue","status":1}
{"index":{"_type":"child_doc","_parent":2}}
{"_uid":5678,"id":2,"completelyDifferentProperty":"someValue","status":2}
{"index":{"_type":"parent_doc"}}
{"_uid":4321,"id":3,"name":"anotherName","newProperty":"anotherValue","status":1}

我们可以这样找到所需的文档;注意,我们仅查询 parent_doc类型,并且我们的条件是 status1,并且根本没有子级:
POST /test_index/parent_doc/_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must": [
{
"term": {
"status": 1
}
},
{
"not": {
"filter": {
"has_child": {
"type": "child_doc",
"query": {
"match_all": {}
}
}
}
}
}
]
}
}
}
}
}

返回:
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "test_index",
"_type": "parent_doc",
"_id": "3",
"_score": 1,
"_source": {
"_uid": 4321,
"id": 3,
"name": "anotherName",
"newProperty": "anotherValue",
"status": 1
}
}
]
}
}

这是我用来测试的所有代码:

http://sense.qbox.io/gist/d1a0267087d6e744b991de5cdec1c31d947ebc13

关于elasticsearch - Elasticsearch查询-返回没有相应文档的所有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31318379/

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