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

关于包含json for bool查询的elasticsearch文档的混乱

楚羽
2023-03-14

在elasticsearch文档中查找bool查询,请参见以下链接:https://www.elastic.co/guide/en/elasticsearch/reference/1.4/query-dsl-bool-query.html

它没有说包含结构。如果我只是按照他们的方式使用bool,那是完全错误的。我需要用一些查询/筛选/筛选查询的愚蠢组合来围绕这个问题。我不确定在Elastic中形成json查询的正确方法是什么。这些文件似乎在许多地方完全矛盾,关于什么去哪里和如何去。有没有elasticsearch专家知道如何正确地形成查询?

共有1个答案

逄宁
2023-03-14

首先,有一个“bool”查询和一个“bool”筛选器,它们位于不同的位置,所做的事情略有不同。作为一般规则,如果您可以使用筛选器,请执行此操作(其中许多筛选器可以缓存,即使不缓存,也会稍微快一点)。如果需要“match”,则需要查询。

您引用的页面上的示例实际上可以用两种方式:

作为查询:

POST /test_index/_search
{
   "query": {
      "bool": {
         "must": {
            "term": {
               "user": "kimchy"
            }
         },
         "must_not": {
            "range": {
               "age": {
                  "from": 10,
                  "to": 20
               }
            }
         },
         "should": [
            {
               "term": {
                  "tag": "wow"
               }
            },
            {
               "term": {
                  "tag": "elasticsearch"
               }
            }
         ],
         "minimum_should_match": 1,
         "boost": 1
      }
   }
}

或作为筛选器(在筛选的查询中):

POST /test_index/_search
{
   "query": {
      "filtered": {
         "filter": {
            "bool": {
               "must": {
                  "term": {
                     "user": "kimchy"
                  }
               },
               "must_not": {
                  "range": {
                     "age": {
                        "from": 10,
                        "to": 20
                     }
                  }
               },
               "should": [
                  {
                     "term": {
                        "tag": "wow"
                     }
                  },
                  {
                     "term": {
                        "tag": "elasticsearch"
                     }
                  }
               ],
               "minimum_should_match": 1
            }
         }
      }
   }
}

同时,我也完全对ES文档感到沮丧。我已经和他们一起工作几年了,他们似乎没有任何好转。也许负责文档的人并不关心这些。阴谋论的观点是,糟糕的文档有助于公司销售专业服务。

 类似资料:
  • 如果我有文件: 我想用“红棕色黄”查询,得到文档1。 我怎么能这么做?反过来很容易...

  • 如何查询同时包含键值对“key1”-“value1”和“key2”-“value2”的文档?我似乎找不到关于这个的任何文件。 我尝试了下面的查询,但它没有返回任何结果,即使应该有匹配的文档。虽然用should替换must是可行的,但当我将minimum_should_match=100%时,它也不会返回任何结果。 这是映射的外观: 非常感谢你的帮助。

  • 我是elasticsearch的新手,对如何进行过滤器、查询和聚合有一些想法,但不确定如何解决下面的问题。我希望能够从下面显示的文档中只查询公司的最新交付(日期和crate_quantity)。我不确定如何去做。有没有办法使用最大聚合从每个文档中只提取最近的交付?

  • 我有如下所示的ES文档: 我需要一个搜索(或多个搜索)的以下答案 将来有的文档数(例如>现在) 将来有检查的文档数(例如>现在) 未来7天的日期直方图(日细分),包含当天具有的文档数 未来7天的日期直方图(日细分),包含当天的文档数 所以,我正试图找出如何有效地得到这些答案。我知道我可以/应该测试所有不同的方法,但我对ES相对来说是新手,所以说起来容易做起来难。 有人能给我一个建议(或者理想情况下

  • 我正在尝试查询嵌入的文档,以获得如下结果: 文件: 我正在尝试使用SQL查询查询上述文档: 预期输出:(当我们使用位置 Id = 14 时,我们需要忽略位置 Id = 16,因为 Id = 1): 不起作用,我没有得到预期的输出,当我使用上述查询时,它给我空的结果。我如何使用嵌入文档上的where子句进行查询?

  • 我在ElasticSearch有索引。其中的文档具有重复的字段值。在查询结果中,我需要删除所有重复项,并且只获得不同的值。例如: PUT localhost:9200/人 POST localhost:9200/人/人 我试图通过字段“name”删除重复的术语聚合,但它不起作用。 获取localhost:9200/person/person/_search 结果: 聚合应用于name=“marry