gpt4 book ai didi

elasticsearch - elasticsearch-如何过滤对对象属性的查询

转载 作者:行者123 更新时间:2023-12-02 22:33:35 25 4
gpt4 key购买 nike

在我的文档中,我有一个带有用户ID的对象,作为属性:

{
name:"bill"
connections:{
352077: {
id :352077
username :john
genre :"M"
}
3472236: {
id :3472236
username :cris
genre :"F"
}
4967367: {
id :4967367
username :mary
genre :"F"
}
}
}

如何执行 查询以仅获得 genre =“F” 的连接?

要运行更新查询,它可以很好地工作:
{script:"for(i:ctx._source['connections'].entrySet()){ i.value.genre = 'F'; }"}

但是我不知道如何作为GET查询运行。

最佳答案

我认为您应该像这样重组文档

curl -XPUT 'http://localhost:9200/myindex/connection/bill_352077' -d '{
"name":"bill",
"id":352077,
"username":"john",
"genre":"M"
}'

curl -XPUT 'http://localhost:9200/myindex/connection/bill_3472236' -d '{
"name":"bill",
"id":3472236,
"username":"cris",
"genre":"F"
}'

curl -XPUT 'http://localhost:9200/myindex/connection/bill_4967367' -d '{
"name":"bill",
"id":4967367,
"username":"mary",
"genre":"F"
}'

curl -XPUT 'http://localhost:9200/myindex/connection/bob_12345' -d '{
"name":"bob",
"id":12345,
"username":"rosie",
"genre":"F"
}'

curl -XGET 'http://localhost:9200/myindex/connection/_search?q=genre:F%20AND%20name:bill'

如果这不是一个选择,也许您可​​以尝试一次multi_search查询
{
"query":{
"multi_match":{
"query":"F",
"fields":[
"connections.*.genre"
]
}
}
}

但这对于您的文档结构并没有真正的作用,因为它没有缩进以在文档中搜索并仅返回搜索匹配的部分。 https://github.com/elasticsearch/elasticsearch/issues/3022

也许您可以通过嵌套映射来解决它,
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html
但是您只能通过嵌套查询访问此类文档,通常这不是您想要的。

关于elasticsearch - elasticsearch-如何过滤对对象属性的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23446865/

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