【发布时间】:2020-09-15 14:39:31
【问题描述】:
我有一个 elasticsearch query,看起来像这样......
"query": {
"bool": {
"must": [{
"match": {"attrs.name": "username"}
}, {
"match": {"attrs.value": "johndoe"}
}]
}
}
...索引中的文档如下所示:
{
"key": "value",
"attrs": [{
"name": "username",
"value": "jimihendrix"
}, {
"name": "age",
"value": 23
}, {
"name": "alias",
"value": "johndoe"
}]
}
这个查询真正是什么意思?
- 文档应包含
attrs.name = username或attrs.value = johndoe - 或者,文档应该同时包含
attrs.name = username和attrs.value = johndoe,即使它们可能匹配attrs数组中的不同元素(这意味着上面给出的文档将匹配查询) - 或者,文档应该同时包含
attrs.name = username和attrs.value = johndoe,但它们必须匹配attrs数组中的相同元素(这意味着上面给出的文档将不匹配查询)
进一步,我如何编写一个查询来表达上面列表中的#3,即只有当attrs数组中的单个元素时,文档才应该匹配匹配两个以下条件:
- attrs.name = 用户名
- attrs.value = johndoe
【问题讨论】:
-
你能分享你的映射吗?
-
@OpsterElasticsearchNinja 我是 ES 新手,所以我可能不会掌握一些基本术语。什么是“映射”?
-
@SaurabhNanda,我在您的示例数据上进行了尝试,使用
nested数据类型得到了预期的输出,请参考我的回答。映射是指在 Elasticsearch 中如何对数据进行建模,即使用什么类型的字段,使用什么分析器,您可以将其视为 SQL 的表定义,请参阅elastic.co/guide/en/elasticsearch/reference/current/… 了解更多详细信息。 -
@SaurabhNanda 您是否有机会查看我的答案,如果您需要更多信息,请告诉我。
标签: elasticsearch elasticsearch-query booleanquery