elasticsearch 在Kibana/ElasticSearch中搜索多个字段
在SQL中,我有elasticsearch 在Kibana/ElasticSearch中搜索多个字段,elasticsearch,kibana,elastic-stack,elk,elasticsearch,Kibana,Elastic Stack,Elk,在SQL中,我有 select Column1 , column2, column3 from Table where Column4 in ['a','b','c','d'] 我试图在Kibana中实现SQL语句,在这种情况下编写SQL语句面临挑战 { "query": { "bool": { "must": [ { "term": { "field1": "X" } },
select Column1 , column2, column3 from Table where Column4 in ['a','b','c','d']
我试图在Kibana中实现SQL语句,在这种情况下编写SQL语句面临挑战
{
"query": {
"bool": {
"must": [
{
"term": {
"field1": "X"
}
},
{
"term": {
"field2": "Z"
}
}
],
}
}
}
只需将所需的值写入数组即可
在您的示例中,编写[a、b、c、d]而不是“X”来获得上述结果,您可以使用
bool
querymust
子句或should
子句,其中应匹配最小参数。关于这一点,您可以参考
为上述列创建的映射为:
映射
您可以通过两种方式获得搜索结果:
您可以使用match
query在must
子句中传递所有搜索值<代码>匹配
默认使用或运算符。因此,它将匹配column4
值与这些“a b c d”中任何一个匹配的任何文档。您可以从中了解匹配查询的默认运算符
查询:
您还可以为每个值使用带有匹配查询的should子句。并通过使用minimum\u should\u match
参数限制为仅一个匹配
问题2:
对于第4列的数据类型,您可以使用第一次查询。我们也可以使用“查询字符串”查询来实现相同的功能。由于我们希望在同一字段上匹配多个值,因此可以使用query\u string,并将default\u字段设置为search字段
{
"_source": ["column1", "column2", "column3"],
"query": {
"query_string" : {
"query" : "a OR b OR c OR d",
"default_field" : "column4"
}
}
}
虽然此代码可能提供问题的解决方案,但强烈建议您提供有关此代码为什么和/或如何回答问题的其他上下文。从长远来看,纯代码的答案通常会变得毫无用处,因为未来遇到类似问题的观众无法理解解决方案背后的原因。Query1可以是一个简单的匹配查询,而不是将其包装在bool查询中。@KumarV是的,我错过了这件事。谢谢你让我知道。将更新我的答案。
{
"_source": [
"column1",
"column2",
"column3"
],
"query": {
"match": {
"column4": "a b c d"
}
}
}
{
"_source": ["column1", "column2", "column3"],
"query" : {
"bool" : {
"should" : [
{
"match" : {
"column4" : "a"
}
},
{
"match" : {
"column4" : "b"
}
},
{
"match" : {
"column4" : "c"
}
},
{
"match" : {
"column4" : "d"
}
}
],
"minimum_should_match" : "1"
}
}
}
{
"_source": ["column1", "column2", "column3"],
"query": {
"query_string" : {
"query" : "a OR b OR c OR d",
"default_field" : "column4"
}
}
}