如何在 Elasticsearch 中通过两个子句过滤数据?
How to filter data by two clauses in Elasticsearch?
我正在尝试根据两个条件过滤数据集。如果它满足条件 1(其中记录包含 A 和 B)或条件 2(其中记录包含 A 和 C),并且包含通配符,我希望我的结果 return 记录。
例如,如果我这里有这个 table(Z 只是一个随机填充字符):
TABLE 1
AZZZ ZBZ
ZZZZ ZAZ
ZZAZ ZZB
CZZZ ZZA
AZZZ ZCZ
ZZZZ ZZZ
ZZCZ ZZZ
我希望我的 return 结果是这样的:
TABLE 1 (Returned)
AZZZ ZBZ
ZZAZ ZZB
CZZZ ZZA
AZZZ ZCZ
我一直在尝试这些代码,但似乎无法获得预期的结果:
{
"query":{
"query_string":{
"analyze_wildcard":true,
"default filter":"*",
"query":"A B"
}
}
}
有什么想法吗?
Wildcard queries 允许您匹配未分析 (keyword
) 字段上的字符串部分,例如:
POST my_index/_search
{
"query": {
"wildcard" : { "my_field" : "*A*" }
}
}
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
}
}
}
但这不会很高效。很难抽象出你有什么样的数据以及你想要实现什么,但也许有更好的方法来实现这一点?这个问题感觉很大程度上是围绕关系数据库的特性建模的,而搜索引擎有更多的选择。
我正在尝试根据两个条件过滤数据集。如果它满足条件 1(其中记录包含 A 和 B)或条件 2(其中记录包含 A 和 C),并且包含通配符,我希望我的结果 return 记录。
例如,如果我这里有这个 table(Z 只是一个随机填充字符):
TABLE 1
AZZZ ZBZ
ZZZZ ZAZ
ZZAZ ZZB
CZZZ ZZA
AZZZ ZCZ
ZZZZ ZZZ
ZZCZ ZZZ
我希望我的 return 结果是这样的:
TABLE 1 (Returned)
AZZZ ZBZ
ZZAZ ZZB
CZZZ ZZA
AZZZ ZCZ
我一直在尝试这些代码,但似乎无法获得预期的结果:
{
"query":{
"query_string":{
"analyze_wildcard":true,
"default filter":"*",
"query":"A B"
}
}
}
有什么想法吗?
Wildcard queries 允许您匹配未分析 (
keyword
) 字段上的字符串部分,例如:POST my_index/_search { "query": { "wildcard" : { "my_field" : "*A*" } } }
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 } } }
但这不会很高效。很难抽象出你有什么样的数据以及你想要实现什么,但也许有更好的方法来实现这一点?这个问题感觉很大程度上是围绕关系数据库的特性建模的,而搜索引擎有更多的选择。