当前位置: 首页 > 知识库问答 >
问题:

在Elasticsearch 2.3.0中匹配null in应该查询

孔嘉茂
2023-03-14

我有一个字段性别,它可以有三个值:

  • 男性
  • 女性
  • null

性别映射为:

"gender": {
    "type": "string",
    "index": "not_analyzed"
}

要匹配空值,我遵循以下步骤。

我使用此查询获取性别为空的文档:

{
    "query": {
        "bool": {
            "must_not": {
                "exists": {
                    "field": "gender"
                }
            }
        }
    }
}

我想构建一个should(应该)查询,以便搜索结果可以返回任何具有性别字段的文档:

{
  "query": {
    "bool": {
      "should": {
        "bool": {
          "should": [
            {
              "match": {
                "gender": {
                  "query": "MALE",
                  "type": "boolean"
                }
              }
            },
            {
              "match": {
                "gender": {
                  "query": "FEMALE",
                  "type": "boolean"
                }
              }
            }
          ],
          "must_not": {
            "exists": {
              "field": "gender"
            }
          }
        }
      }
    }
  }
}

上面的查询给了我0次点击。我应该如何为此构造正确的查询?

共有1个答案

雍兴修
2023-03-14
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "gender": {
              "query": "MALE",
              "type": "boolean"
            }
          }
        },
        {
          "match": {
            "gender": {
              "query": "FEMALE",
              "type": "boolean"
            }
          }
        },
        {
          "bool": {
            "must_not": {
              "exists": {
                "field": "gender"
              }
            }
          }
        }
      ]
    }
  }
}

或者,如果我没有很好地理解这个问题,而事实上您想要区分文档中完全缺失的性别或存在的字段,但为空,那么您需要一些其他东西,这需要稍微更改映射:

    "gender": {
      "type": "string",
      "index": "not_analyzed",
      "null_value": "_null_"
    }

在这种情况下,查询是:

  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "gender": {
              "query": "MALE"
            }
          }
        },
        {
          "match": {
            "gender": {
              "query": "FEMALE"
            }
          }
        },
        {
          "term": {
            "gender": "_null_"
          }
        }
      ]
    }
  }

在这种情况下,如果索引:

{"index":{}}
{"gender":"MALE"}
{"index":{}}
{"gender":"FEMALE"}
{"index":{}}
{"gender":null}
{"index":{}}
{"gender2":"MALE"}
{"index":{}}
{"gender":"whatever"}

它会给你回报:

     {
        "_score": 0.2826735,
        "_source": {
           "gender": "MALE"
        }
     },
     {
        "_score": 0.2826735,
        "_source": {
           "gender": null
        }
     },
     {
        "_score": 0.021688733,
        "_source": {
           "gender": "FEMALE"
        }
     }
 类似资料:
  • 我希望搜索具有类似于查询字符串的< code>firstField(映射为文本)或等于1的< code>secondField(映射为整数)的项目。 阅读文档后,我明白我应该使用和(如下所示): 然而,结果表明,对结果的贡献远远低于,因为它们的评分算法产生不同的量表。 我正在考虑人为地ing 。

  • 我正在尝试捕获异常,但无效。以下是我视图中的代码: 我还尝试了:“除了act_edit.DoesNotExist:”但错误仍然存在“活动匹配查询不存在”。你知道吗? 谢谢

  • 我使用的是django-allauth,我用以下细节配置了: 我设置了(因为我将默认站点更改为) 在settings.py中: 当我去: 我得到: 我做错了什么?

  • 根据这个问题的公认答案,React路由器4不再匹配查询参数。如果我从一个与我的<code>匹配的URL 例如,许多搜索引擎和其他使用搜索栏的网站,包括我正在工作的网站,都使用一个查询参数,通常是< code>q或< code>query。用户可以搜索一个东西,然后决定这不是他/她想要的,并搜索另一个东西。用户可以键入第二个URL或者再次使用搜索栏进行搜索。URL路径中实际上没有放置搜索词的位置,所

  • 问题内容: Python noob,因为这是我的第一个项目,所以请原谅我。 在我单击应用程序上的“注销”之前,该网站运行良好。在那之后,网站会给我这个错误:/ login /的SiteNotExist不存在网站匹配查询。 我到处搜索,获得的唯一解决方案与设置站点框架,SITE_ID等有关。我认为计算机上的这些项目都不错,但是找不到帮助你进行检查的演练/指南。 谁能告诉我问题出在哪里以及如何解决?在

  • Python新手,因为这是我的第一个项目,所以原谅我的不熟悉。 在我点击应用程序上的“注销”之前,该网站一直运行良好。之后,网站会给我这个错误:DoesNotExist at/login/Site匹配查询不存在。 我到处搜索,得到的唯一解决方案是建立站点框架、SITE_ID等。我认为我电脑上的这些项目都很好,但是我找不到一个演练/指南来帮助我检查它们。 有人能告诉我问题是什么以及如何解决它吗?提前