elasticsearch ElasticSearch按数组项筛选
我在ES中有以下记录:
elasticsearch ElasticSearch按数组项筛选,
elasticsearch,
elasticsearch,我在ES中有以下记录: "authInput" : { "uID" : "foo", "userName" : "asdfasdfasdfasdf", "userType" : "External", "clientType" : "Unknown", "authType" : "Redemption_regular", "uIDExtensionFields" : [ { "key" : "IsA
"authInput" : {
"uID" : "foo",
"userName" : "asdfasdfasdfasdf",
"userType" : "External",
"clientType" : "Unknown",
"authType" : "Redemption_regular",
"uIDExtensionFields" :
[
{
"key" : "IsAccountCreation",
"value" : "true"
}
],
"externalReferences" : []
}
“uIDExtensionFields”是一个键/值对数组。我想查询ES以查找所有记录,其中:
GET devdev/authEvent/_search
{
"size": 10,
"filter": {
"and": {
"filters": [
{
"term": {
"authInput.uIDExtensionFields.key" : "IsAccountCreation"
}
},
{
"term": {
"authInput.uIDExtensionFields.value": "true"
}
}
]
}
}
}
如果你们能给我任何帮助,我将不胜感激
干杯
更新:在下面回答的帮助下,我是如何解决问题的:
这里可能有一些事情出了问题 首先,正如mconlin指出的,您可能有一个与标准分析器的映射,用于关键字段。它会将密钥小写。您可能希望为字段指定
“索引”:“未分析”
其次,您必须对此文档结构使用嵌套映射,并在嵌套筛选器中指定键和值。这是因为,否则,您将获得以下文档的匹配项:
"uIDExtensionFields" : [
{
"key" : "IsAccountCreation",
"value" : "false"
},
{
"key" : "SomeOtherField",
"value" : "true"
}
]
第三,您需要使用bool
-过滤器的必须而不是和,以确保正确的可访问性
最后,您需要将过滤器放入filtered
-查询中。顶级过滤器适用于希望筛选点击但不希望筛选面/聚合的情况。这就是为什么在1.0中它被重命名为post\u filter
以下是您想要查看的一些资源:
- 涵盖前两个问题
- 覆盖嵌套文档(和父/子文档)
- 涵盖
和
与bool的对比
请尝试“isaccountcreation”的小写键值,具体取决于您的映射。将“isaccountcreation”更改为“isaccountcreation”确实修复了我查询的这一部分,非常感谢!谢谢你,mconlin,你是对的,如果我降低它的大小写,那么它在搜索钥匙时就起作用了@亚历克斯,谢谢你关于筑巢的建议,你说得很对。我的问题是:ES0.9x支持这种嵌套,还是需要1.0版本才能实现这种嵌套?我更新的查询正在运行,但仍然存在需要修复的嵌套问题。
"uIDExtensionFields" : [
{
"key" : "IsAccountCreation",
"value" : "false"
},
{
"key" : "SomeOtherField",
"value" : "true"
}
]