gpt4 book ai didi

ElasticSearch 按数组项过滤

转载 作者:行者123 更新时间:2023-12-01 12:43:26 24 4
gpt4 key购买 nike

我在 ES 中有以下记录:

"authInput" : {
"uID" : "foo",
"userName" : "asdfasdfasdfasdf",
"userType" : "External",
"clientType" : "Unknown",
"authType" : "Redemption_regular",
"uIDExtensionFields" :
[
{
"key" : "IsAccountCreation",
"value" : "true"
}
],
"externalReferences" : []
}

“uIDExtensionFields”是一个键/值对数组。我想查询 ES 以查找所有记录,其中:
  • "uIDExtensionFields.key"= "IsAccountCreation"
  • AND "uIDExtensionFields.value"= "true"

  • 这是我认为我应该使用的过滤器,但它从不返回任何数据。
    GET devdev/authEvent/_search
    {
    "size": 10,
    "filter": {
    "and": {
    "filters": [
    {
    "term": {
    "authInput.uIDExtensionFields.key" : "IsAccountCreation"
    }
    },
    {
    "term": {
    "authInput.uIDExtensionFields.value": "true"
    }
    }
    ]
    }
    }
    }

    你们能给我的任何帮助将不胜感激。

    干杯!

    更新:在以下回复的帮助下,我是如何解决问题的:
  • 小写我正在搜索的值。 (将“IsAccoutCreation”更改为“isaccountcreation”)
  • 更新了映射,使“uIDExtensionFields”成为嵌套类型
  • 将我的过滤器更新为以下内容:

  • _
    GET devhilden/authEvent/_search
    {
    "size": 10,
    "filter": {
    "nested": {
    "path": "authInput.uIDExtensionFields",
    "query": {
    "bool": {
    "must": [
    {
    "term": {
    "authInput.uIDExtensionFields.key": "isaccountcreation"
    }
    },
    {
    "term": {
    "authInput.uIDExtensionFields.value": "true"
    }
    }
    ]
    }
    }
    }
    }
    }

    最佳答案

    这里可能有一些问题。

    首先,正如 mconlin 指出的那样,您可能有一个与关键字段的标准分析器的映射。它将小写键。您可能想指定 "index": "not_analyzed"为领域。

    其次,您必须为此文档结构使用嵌套映射,并在嵌套过滤器中指定键和值。这是因为否则,您将获得以下文档的匹配项:

    "uIDExtensionFields" : [
    {
    "key" : "IsAccountCreation",
    "value" : "false"
    },
    {
    "key" : "SomeOtherField",
    "value" : "true"
    }
    ]

    第三,您需要使用 bool -过滤器的 must而不是 and以确保适当的可缓存性。

    最后,您需要将过滤器放入 filtered -询问。顶级过滤器适用于您希望过滤命中但不过滤方面/聚合的情况。这就是为什么它被重命名为 post_filter在 1.0.

    以下是您需要查看的一些资源:
  • Troubleshooting Elasticsearch searches, for Beginners涵盖前两个问题。
  • Managing Relations in ElasticSearch涵盖嵌套文档(和父/子)
  • all about elasticsearch filter bitsets封面 and对比 bool .
  • 关于ElasticSearch 按数组项过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22078793/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com