Elasticsearch数组must和must_not

用户名

我的elasticsearch DB中有一个像这样的文档:

{
   "tags"   =>   [
      "tag-1",
      "tag-2",
      "tag-3",
      "tag-A"
   ]
   "created_at"   =>"2013-07-02 12:42:19   UTC",
   "label"   =>"Mon super label"
}

我希望能够使用此条件过滤我的文档:Documents标签数组必须具有标签1,标签3和标签2,但不能具有标签A。

我尝试使用布尔过滤器,但无法使其正常工作!

斯隆·阿伦斯(Sloan Ahrens)

这是一种似乎可以满足您需要的方法:http : //sense.qbox.io/gist/4dd806936f12a9668d61ce63f39cb2c284512443

首先,我创建了带有显式映射的索引。我这样做是"tags"为了属性设置"index": "not_analyzed"这意味着将不会以任何方式修改文本,这将简化此示例的查询过程。

curl -XPUT "http://localhost:9200/test_index" -d'
{
    "mappings": {
        "docs" : {
            "properties": {
                "tags" : {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "label" : {
                    "type": "string"
                }
            }
        }
    }
}'

然后添加一些文档:

curl -XPUT "http://localhost:9200/test_index/docs/1" -d'
{
    "tags" : [
        "tag-1",
        "tag-2",
        "tag-3",
        "tag-A"
    ],
    "label" : "item 1"
}'
curl -XPUT "http://localhost:9200/test_index/docs/2" -d'
{
    "tags" : [
        "tag-1",
        "tag-2",
        "tag-3"
    ],
    "label" : "item 2"
}'
curl -XPUT "http://localhost:9200/test_index/docs/3" -d'
{
    "tags" : [
        "tag-1",
        "tag-2"
    ],
    "label" : "item 3"
}'

然后,我们可以过滤器中使用mustmust_not子句进行查询bool,如下所示:

curl -XPOST "http://localhost:9200/test_index/_search" -d'
{
   "query": {
      "filtered": {
         "query": {
            "match_all": {}
         },
         "filter": {
            "bool": {
               "must": [
                  {
                     "terms": {
                        "tags": [
                           "tag-1",
                           "tag-2",
                           "tag-3"
                        ],
                        "execution" : "and"
                     }
                  }
               ],
               "must_not": [
                  {
                      "term": {
                         "tags": "tag-A"
                      }
                  }
               ]
            }
         }
      }
   }
}'

产生正确的结果:

{
   "took": 3,
   "timed_out": false,
   "_shards": {
      "total": 2,
      "successful": 2,
      "failed": 0
   },
   "hits": {
      "total": 1,
      "max_score": 1,
      "hits": [
         {
            "_index": "test_index",
            "_type": "docs",
            "_id": "2",
            "_score": 1,
            "_source": {
               "tags": [
                  "tag-1",
                  "tag-2",
                  "tag-3"
               ],
               "label": "item 2"
            }
         }
      ]
   }
}

注意子句中过滤器中的"execution" : "and"参数这意味着将仅返回具有所有指定内容的文档(而不是与一个或多个匹配的文档)。那可能就是你所缺少的。您可以在ES文档中阅读有关选项的更多信息termsmust"tags"

如果您在上安装并运行了ES,那么我在这里做了一个可运行的示例,您可以使用它,localhost:9200也可以提供自己的端点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

elasticsearch的Query DSL中must和filter有什么区别?

来自分类常见问题

组合filter和must in elasticsearch

来自分类Dev

lmer error: grouping factor must be < number of observations

来自分类Dev

Expression must have a pointer to object type in C

来自分类Dev

JRE version must be equal to or above JDK version?

来自分类Dev

术语,嵌套文档和must_not查询在ElasticSearch中不兼容?

来自分类Dev

php extension mcrypt must be loaded

来自分类Dev

Are quoted dictionary keys an absolute must?

来自分类Dev

error: expression must have integral or enum type

来自分类Dev

Are copy constructor and operator= a must?

来自分类Dev

The value of 'form' must inherit from 'BaseModelForm'

来自分类Dev

ElasticSearch结合了MultiMatch和Must

来自分类Dev

在ElasticSearch查询中组合must_not

来自分类Dev

Elasticsearch中的位数组用法和过滤

来自分类Dev

Elasticsearch顶级query.term和query.bool.must.term:是否等效?

来自分类Dev

使用Must Field值编写Elasticsearch Nest Bool查询

来自分类Dev

组合filter和must in elasticsearch

来自分类Dev

Elasticsearch-must(QueryBuilders.rangeQuery)和mustNot(QueryBuilders.existsQuery)一次不起作用

来自分类Dev

Elasticsearch排序方式:元素在数组中的存在和日期

来自分类Dev

术语,嵌套文档和must_not查询在ElasticSearch中不兼容?

来自分类Dev

ElasticSearch:bool-must-term(3)等效于带有minimum_should_match 3的旧术语

来自分类Dev

如何在HBase过滤器中混合MUST_PASS_ALL和MUST_PASS_ONE?

来自分类Dev

Elasticsearch must_not 查询与正则表达式不匹配

来自分类Dev

Elasticsearch 在 must 中适用于一个术语,但不适用于两个

来自分类Dev

如何在elasticsearch6中使用SHOULD里面的MUST?

来自分类Dev

ElasticSearch 索引和映射数组

来自分类Dev

Elasticsearch 如何在 must_not 中添加 bool 查询并在 java API 中使用多个匹配?

来自分类Dev

我正在尝试将头环绕在 elasticsearch dsl 下方。有人能告诉我下面是如何使用`must`子句的吗

来自分类Dev

Elasticsearch 7.0:过滤器 must_not 查询错误

Related 相关文章

  1. 1

    elasticsearch的Query DSL中must和filter有什么区别?

  2. 2

    组合filter和must in elasticsearch

  3. 3

    lmer error: grouping factor must be < number of observations

  4. 4

    Expression must have a pointer to object type in C

  5. 5

    JRE version must be equal to or above JDK version?

  6. 6

    术语,嵌套文档和must_not查询在ElasticSearch中不兼容?

  7. 7

    php extension mcrypt must be loaded

  8. 8

    Are quoted dictionary keys an absolute must?

  9. 9

    error: expression must have integral or enum type

  10. 10

    Are copy constructor and operator= a must?

  11. 11

    The value of 'form' must inherit from 'BaseModelForm'

  12. 12

    ElasticSearch结合了MultiMatch和Must

  13. 13

    在ElasticSearch查询中组合must_not

  14. 14

    Elasticsearch中的位数组用法和过滤

  15. 15

    Elasticsearch顶级query.term和query.bool.must.term:是否等效?

  16. 16

    使用Must Field值编写Elasticsearch Nest Bool查询

  17. 17

    组合filter和must in elasticsearch

  18. 18

    Elasticsearch-must(QueryBuilders.rangeQuery)和mustNot(QueryBuilders.existsQuery)一次不起作用

  19. 19

    Elasticsearch排序方式:元素在数组中的存在和日期

  20. 20

    术语,嵌套文档和must_not查询在ElasticSearch中不兼容?

  21. 21

    ElasticSearch:bool-must-term(3)等效于带有minimum_should_match 3的旧术语

  22. 22

    如何在HBase过滤器中混合MUST_PASS_ALL和MUST_PASS_ONE?

  23. 23

    Elasticsearch must_not 查询与正则表达式不匹配

  24. 24

    Elasticsearch 在 must 中适用于一个术语,但不适用于两个

  25. 25

    如何在elasticsearch6中使用SHOULD里面的MUST?

  26. 26

    ElasticSearch 索引和映射数组

  27. 27

    Elasticsearch 如何在 must_not 中添加 bool 查询并在 java API 中使用多个匹配?

  28. 28

    我正在尝试将头环绕在 elasticsearch dsl 下方。有人能告诉我下面是如何使用`must`子句的吗

  29. 29

    Elasticsearch 7.0:过滤器 must_not 查询错误

热门标签

归档