elasticsearch ElasticSearch按数组项筛选,elasticsearch,elasticsearch" /> elasticsearch ElasticSearch按数组项筛选,elasticsearch,elasticsearch" />

elasticsearch ElasticSearch按数组项筛选

elasticsearch ElasticSearch按数组项筛选,elasticsearch,elasticsearch,我在ES中有以下记录: "authInput" : { "uID" : "foo", "userName" : "asdfasdfasdfasdf", "userType" : "External", "clientType" : "Unknown", "authType" : "Redemption_regular", "uIDExtensionFields" : [ { "key" : "IsA

我在ES中有以下记录:

"authInput" : {
    "uID" : "foo",
    "userName" : "asdfasdfasdfasdf",
    "userType" : "External",
    "clientType" : "Unknown",
    "authType" : "Redemption_regular",
    "uIDExtensionFields" : 
    [
        {
            "key" : "IsAccountCreation",
            "value" : "true"
        }
    ],
    "externalReferences" : []
}
“uIDExtensionFields”是一个键/值对数组。我想查询ES以查找所有记录,其中:

  • “uIDExtensionFields.key”=“IsAccountCreation”
  • 和“uIDExtensionFields.value”=“true”
  • 这是我认为应该使用的过滤器,但它从不返回任何数据

    GET devdev/authEvent/_search
    {
       "size": 10,
        "filter": {
            "and": {
               "filters": [
                  {
                      "term": {
                         "authInput.uIDExtensionFields.key" : "IsAccountCreation"
                      }
                  },
                  {
                   "term": {
                      "authInput.uIDExtensionFields.value": "true"
                   }   
                  }
               ]
            }
        }
    }
    
    如果你们能给我任何帮助,我将不胜感激

    干杯

    更新:在下面回答的帮助下,我是如何解决问题的:

  • 将我搜索的值小写。(将“isaccountcreation”更改为“isaccountcreation”)
  • 已更新映射,以便“uIDExtensionFields”是嵌套类型
  • 已将我的筛选器更新为以下内容:
  • _


    这里可能有一些事情出了问题

    首先,正如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"
        }
    ]