在 Kibana /ElasticSearch 中搜索多个字段

Search Multiple Fields in Kibana /ElasticSearch

在 SQL 我有

select Column1 , column2, column3 from Table where Column4 in ['a','b','c','d']

我正在尝试在 Kibana 中实现 SQL 语句,但我在编写 In 条件时遇到了挑战。

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "field1": "X"
          }
        },
        {
          "term": {
            "field2": "Z"
          }
        }
      ],

    }
  }
}

只需将你想要的值写成一个数组即可。

在你的例子中,写 [a,b,c,d] 而不是 "X"

要获得上述结果,您可以使用 bool 查询 must 子句或带有 minimum_should_match 参数的 should 子句。您可以从 here.

参考更多相关信息

为以上列创建的映射是:

映射

"mappings" : {
        "properties" : {
            "column1" : {
                "type":"text"
            },
            "column2" : {
                "type":"text"
            },
            "column3" : {
                "type":"text"
            }, 
            "column4" : {
                "type":"text"
            }
        }
    }

您可以通过两种方式获取搜索结果:

  1. 您可以在 must 子句中将所有搜索值传递给 match 查询。 Match 默认使用 OR 运算符。因此,它将匹配 column4 值与这些 "a b c d" 中的任何一个匹配的任何文档。您可以从 here.
  2. 了解匹配查询的默认运算符

查询:

    {
    "_source": [
        "column1",
        "column2",
        "column3"
    ],
    "query": {
        "match": {
            "column4": "a b c d"
        }
    }
}
  1. 您也可以在每个值的匹配查询中使用 should 子句。并使用 minimum_should_match 参数限制为只有一个匹配项。

查询 2:

 {
     "_source": ["column1", "column2", "column3"],
    "query" : {
        "bool" : {
            "should" : [
                {
                    "match" : {
                        "column4" : "a"
                    }
                },
                {
                    "match" : {
                        "column4" : "b"
                    }
                },
                {
                    "match" : {
                        "column4" : "c"
                    }
                },
                {
                    "match" : {
                        "column4" : "d"
                    }
                }
            ],
            "minimum_should_match" : "1"
        }
    }
}

对于 column4 的数据类型,您可以使用第一个查询。

我们也可以使用"query_string"查询来达到同样的目的。由于我们希望在同一字段上匹配多个值,因此可以将 query_string 与 default_field 设置为搜索字段一起使用。

{
   "_source": ["column1", "column2", "column3"],
   "query": {
        "query_string" : {
            "query" : "a OR b OR c OR d",
            "default_field" : "column4"
        }
    }
}