在我的文档中,我有一个对象,用户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"
}
}
}
如何执行查询以获取仅与流派=" F" 的连接?
要运行更新查询,这很有效:
{script:"for(i:ctx._source['connections'].entrySet()){ i.value.genre = 'F'; }"}
但我不知道如何作为GET查询运行。
答案 0 :(得分:1)
我认为你应该重新构建你的文件
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 但是你只能通过嵌套查询来访问这些文档,而这通常不是你想要的。