ElasticSearch词vs匹配

quhf5bfb  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(322)

我必须在条件2下编写一个搜索查询。
时间戳
目录
当我在下面这样的搜索查询中使用匹配时

{
   "query":{
      "bool":{
         "must":{
            "match":{
               "directory":"/user/ayush/test/error/"
            }
         },
         "filter":{
            "range":{
               "@timestamp":{
                  "gte":"2020-08-25 01:00:00",
                  "lte":"2020-08-25 01:30:00",
                  "format":"yyyy-MM-dd HH:mm:ss"
               }
            }
         }
      }
   }
}

在筛选结果中,我得到目录为的记录 /user/ayush/test/error/ /user/hive/ /user/ 但当我使用下面这样的术语时

{
   "query":{
      "bool":{
         "must":{
            "term":{
               "directory":"/user/ayush/test/error/"
            }
         },
         "filter":{
            "range":{
               "@timestamp":{
                  "gte":"2020-08-25 01:00:00",
                  "lte":"2020-08-25 01:30:00",
                  "format":"yyyy-MM-dd HH:mm:ss"
               }
            }
         }
      }
   }
}

我没有得到任何结果,甚至没有目录值 /user/ayush/test/error/

hfyxw5xn

hfyxw5xn1#

匹配查询分析输入字符串并从中构造更基本的查询。
术语查询匹配精确的术语。
请参阅以下博客以获取详细信息:
那么,关于术语和匹配查询的问题呢
https://discuss.elastic.co/t/term-query-vs-match-query/14455
elasticsearch匹配与术语查询
字段值 /user/ayush/test/error/ 分析如下:

POST/_analyze
{
  "analyzer" : "standard",
  "text" : "/user/ayush/test/error/"
}

生成的令牌是:

{
    "tokens": [
        {
            "token": "user",
            "start_offset": 1,
            "end_offset": 5,
            "type": "<ALPHANUM>",
            "position": 0
        },
        {
            "token": "ayush",
            "start_offset": 6,
            "end_offset": 11,
            "type": "<ALPHANUM>",
            "position": 1
        },
        {
            "token": "test",
            "start_offset": 12,
            "end_offset": 16,
            "type": "<ALPHANUM>",
            "position": 2
        },
        {
            "token": "error",
            "start_offset": 17,
            "end_offset": 22,
            "type": "<ALPHANUM>",
            "position": 3
        }
    ]
}

索引数据:

{ "directory":"/user/ayush/test/error/" }
{ "directory":"/user/ayush/" }
{ "directory":"/user" }

使用术语查询搜索查询:
术语查询不会对搜索术语应用任何分析器,因此只会在倒排索引中查找确切的术语。所以要搜索准确的术语,你需要使用 directory.keyword 或更改字段的Map。

{
  "query": {
    "term": {
      "directory.keyword": {
        "value": "/user/ayush/test/error/",
        "boost": 1.0
      }
    }
  }
}

术语查询的搜索结果:

"hits": [
            {
                "_index": "my_index",
                "_type": "_doc",
                "_id": "1",
                "_score": 0.9808291,
                "_source": {
                    "directory": "/user/ayush/test/error/"
                }
            }
        ]

相关问题