如何通过Elasticsearch中的两个子句过滤数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过Elasticsearch中的两个子句过滤数据?相关的知识,希望对你有一定的参考价值。

我试图根据两个条件过滤数据集。我希望我的结果返回记录,如果它满足条件1(其中记录包含A和B),或条件2(其中记录包含A和C),包括通配符。

例如,如果我在这里有这个表(并且Z只是一个随机填充字符):

TABLE 1
AZZZ ZBZ
ZZZZ ZAZ
ZZAZ ZZB
CZZZ ZZA
AZZZ ZCZ
ZZZZ ZZZ
ZZCZ ZZZ

我希望我的返回结果是这样的:

TABLE 1 (Returned)
AZZZ ZBZ
ZZAZ ZZB
CZZZ ZZA
AZZZ ZCZ

我一直在尝试这些代码,但似乎无法获得预期的结果:

{  
   "query":{  
      "query_string":{  
         "analyze_wildcard":true,
         "default filter":"*",
         "query":"A B"
      }
   }
}

有什么想法吗?

答案
  1. Wildcard queries允许您匹配未分析(keyword)字段的字符串部分,例如: POST my_index/_search { "query": { "wildcard" : { "my_field" : "*A*" } } }
  2. Bool queries是你结合事物的朋友。我认为将此重构为以下应该更加容易: POST my_index/_search { "query": { "bool" : { "must" : { "wildcard" : { "my_field" : "*A*" } }, "should" : [ { "wildcard" : { "my_field" : "*B*" } }, { "wildcard" : { "my_field" : "*C*" } } ], "minimum_should_match" : 1 } } }

但这不会很有效。抽象那里有什么样的数据以及你想要实现的目标有点困难,但也许有更好的方法来实现这一目标?这个问题非常模仿关系数据库的功能,而搜索引擎则有很多选择。

以上是关于如何通过Elasticsearch中的两个子句过滤数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过文本框过滤数据表视图中的子表单? #likeoperator #where 子句

016-elasticsearch-Query DSL-查询上下文,过滤上下文match_all

SQL左连接与JOIN条件中的过滤器与WHERE子句中的过滤器[重复]

elasticsearch中不同字段中的两个过滤器(RANGE)

Elasticsearch Query DSL概述与查询过滤上下文

如何在presto elasticsearch中按子句pushdpown order