gpt4 book ai didi

elasticsearch - 术语查找机制查询可以嵌套吗

转载 作者:行者123 更新时间:2023-12-03 12:18:40 25 4
gpt4 key购买 nike

我想知道我能否将一个术语查找机制查询嵌套在另一个术语查找机制中。例如:

curl -XPUT localhost:9200/users/user/2 -d '{
"tweets" : ["1", "3"]
}'

curl -XPUT localhost:9200/tweets/tweet/1 -d '{
"uuid" : "1",
"comments":["1","2","3"]
}'

curl -XPUT localhost:9200/comments/comment/1 -d '{
"uuid" : "1"
}'

如您所知,我们可以使用术语查找机制查询来获取属于用户的推文:

curl -XGET localhost:9200/tweets/tweet/_search -d'{
"query" : {
"terms" : {
"uuid" : {
"index" : "users",
"type" : "user",
"id" : "2",
"path" : "tweets"
}
}
}
}'

但是如果我想得到评论,我必须做另一个查询。但是我的文件太多了,这不是一个好方法。所以我想嵌套术语查找查询,以便通过用户 ID 仅在一个查询中获取评论,可以吗?如果你能给我一些帮助,我将不胜感激。谢谢! :)

最佳答案

目前,据我所知,这是不可能的,因为您希望在一个查询中返回来自三个不同索引的数据,这相当于一个 JOIN。查找查询术语“仅”在两个索引之间实现 JOIN(考虑到 ES 一开始就不想支持 JOIN 的事实,这已经很酷了)。

解决此问题的一种方法是重构您的数据模型以摆脱 comments 索引,并在 tweet 中使用父/子和/或嵌套关系映射类型。由于一条评论只能属于一条推文,而且一条推文通常不会有数百条评论(我很乐意接受 99% 的情况下每条推文只有不到六条评论的想法,如果有的话)完全没有),您可以将评论添加为 child documents或作为 nested document (我的偏好),而不是仅仅将它们的 ID 存储在 comments 数组中。这样您就可以通过现有查询立即获得您的评论,而无需进行第二次查询。

curl -XPUT localhost:9200/tweets/tweet/1 -d '{
"uuid" : "1",
"comments":[{
"id": 1,
"content": "Nice tweet!"
},{
"id": 2,
"content": "Way to go!"
},{
"id": 3,
"content": "Sucks!"
}]
}'

或者您可以等待this pull request (#3278) (通过查询/过滤器(又名。加入过滤器)进行的术语查找)将被合并,这将有效地允许做你所要求的,但是 PR 已经创建了 2 年多以前,仍然有冲突需要解决.

关于elasticsearch - 术语查找机制查询可以嵌套吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34446193/

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