我们有一个用户索引,例如
{
"name": "Eli",
"cars": [
{ "model": "Honda", "color": "Red" },
{ "model": "Honda", "color": "Blue" },
{ "model": "Toyota", "color": "Red" }
]
}
{
"name": "Don",
"cars": [
{ "model": "Honda", "color": "Blue" },
{ "model": "Honda", "color": "Black" },
{ "model": "Toyota", "color": "Red" }
]
}
我们正在尝试使用Red Honda检索所有用户,但我们无法在ElasticSearch中找到实现此目的的方法
最佳答案
由于我不知道您使用的是哪个Elasticsearch版本,所以我指的是当前版本。
您正在查看以下内容:
https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-objects.html
和
https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-mapping.html
和
https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-query.html
使用嵌套映射,您可以创建如下查询:
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "cars",
"query": {
"bool": {
"must": [
{
"term": {
"cars.model": "honda"
}
},
{
"term": {
"cars.color": "red"
}
}
]
}
}
}
}
]
}
}
}
链接到示例:https://www.found.no/play/gist/91c5a6c8c9fe81928b1cc497f8740a3f
(点击运行)
请注意,这仅在使用嵌套对象时有效!映射必须知道这一点。
关于search - 在ElasticSearch数组中查找多值元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38979125/