gpt4 book ai didi

elasticsearch - 'exists'可以用来检测ElasticSearch中的空字符串吗?

转载 作者:行者123 更新时间:2023-12-02 23:13:55 27 4
gpt4 key购买 nike

我以为这很简单,但结果却相当复杂。

我们希望能够从我们的 ElasticSearch 实例中提取空字段而不是空字段。字符串会导致问题。我对空或非空的定义是:


  • 它不存在。
  • 它确实存在,但值为 NULL 或空字符串(对于字符串)。

  • 非空
  • 它确实存在。
  • 它的值不是 NULL 或空字符串(对于字符串)。

  • 而且我已经阅读了有关进行的不同方法,并且所有这些方法似乎都涉及一些复杂性。 The old missing filter, using a script portion on the query to compare with length 0, using term, etc .实现 should_not模仿之前描述的逻辑在我的版本中似乎也不起作用。

    理想情况下,如果我们可以使用 exists,那就太好了。运算符无处不在,因为它可以与我们拥有的所有类型一起使用,日期、整数、字符串等。

    我假设有些事情,但至少在我的情况下似乎不是真的(使用 ElasticSearch 5.5.0):

    "Elasticsearch does not index empty strings"



    我的理解是,如果这是真的,我们可以使用 exists也在那个字符串字段上。查询是由我们编写的模块自动生成的,因此更简单的查询也将简化新功能的编码。在所有情况下都将使用相同的运算符。

    我试图将关键字添加为普通字段:
    ...

    :field {:type "keyword"}

    ...

    并且还嵌套:
    {:type     "text"
    :analyzer "standard"
    :fields {:raw {:type "keyword"}}}

    但似乎没有任何效果:
    {
    "query": {
    "bool": {
    "must_not": [
    {
    "exists" : { "field.raw" : "x" }
    }
    ...
    ...
    ],

    检测到所有空字符串,就好像它们存在一样。我们可以实现任何改变来实现这一点吗?

    最佳答案

    空字符串,例如 ""被认为存在字段。要根据您的定义确定该字段是否为空,您可以使用如下查询:

    {
    "query": {
    "bool": {
    "should": [
    {
    "bool": {
    "must_not": [
    {
    "exists": {
    "field": "someField"
    }
    }
    ]
    }
    },
    {
    "term": {
    "someField": ""
    }
    }
    ]
    }
    }
    }

    替换 someField在上面的查询中,通过索引中的实际字段的名称。

    关于elasticsearch - 'exists'可以用来检测ElasticSearch中的空字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57755644/

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