繁体   English   中英

弹性搜索匹配与术语查询

[英]elasticsearch match vs term query

我使用匹配查询搜索“request.method”:“GET”:

    {
      "query": {
        "filtered": {
          "query": {
            "match": {
              "request.method": "GET"
            }
          },
          "filter": {
            "bool": {
              "must": [
...

不出所料,Match查询可以得到结果,如下图:

在此处输入图片说明

但问题是当使用 Term 查询时,没有结果。

更新查询以将“匹配”更改为“术语”,并保持其他部分保持不变:

{
  "query": {
    "filtered": {
      "query": {
        "term": {
          "request.method": "GET"
        }
      },
      "filter": {
        "bool": {
          "must": [
...

我认为 Term 查询是 Match 查询的“未分析”版本。 如上图所示,至少有一条记录的“request.method”等于“GET”。 为什么上面提到的 Term 查询没有结果? 谢谢你。

在此处输入图片说明

假设您使用的是标准分析器,当存储在索引中时GET变为get 源文档仍将具有原始的“GET”。

match查询将对搜索词应用相同的标准分析器,因此将匹配存储在索引中的内容。 term查询不会对搜索词应用任何分析器,因此只会在倒排索引中查找该确切词。

要在您的示例中使用术语查询,请将大写的“GET”更改为小写的“get”或更改您的映射,以便将 request.method 字段设置为not_analyzed

elasticsearch中term和match的区别

术语是一个精确的查询

匹配是一个模糊查询

术语是完美匹配,即精确查询。 搜索词在搜索之前不会被切分,所以我们的搜索词必须是文档切分集之一。 假设我们要查找所有名为 Jesus Verma 的文档。

 $curl -XGET http://localhost:9200/index/doc/_search?pretty -d 
'{
  "query":{
    "term":{
"title": "Jesus Verma"
    }
  }
}'

匹配查询将首先对搜索词进行分类。 分词后,分词结果会一一匹配。 因此,相较于term的精确搜索,match是分词匹配搜索,匹配搜索有两个功能相似的变体。 一种是match_phrase。 一种是 multi_match

$curl -XGET http://localhost:9200/index/doc/_search?pretty -d 
'{
    "query": {
        "match": {
 "content": "Banglore, India"
        }
    }
}'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM