elasticsearch 如何正确使用空格分析器?

iszxjhcz  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(1)|浏览(214)

我目前遇到了无法在日志中搜索UUID的问题。例如,我有一个字段名“log”,但其中有一个完整的日志,例如:

"log": "time=\"2022-10-10T07:46:00Z\" level=info msg=\"message to endpoint (outgoing)\" message=\"{8503fb5a-3899-4305-8480-6ddc0f5df296 2022-10-10T09:45:59+02:00}\"\n",

我想得到这个日志在ElasticSearch,并通过 Postman 我发送这个:

{
    "query": {
        "match": {
            "log": {
                "analyzer": "whitespace",
                "query": "8503fb5a-3899-4305-8480-6ddc0f5df296"
            }
        }
    },
    "size": 50,
    "from": 0
}

我得到的回应是:

{
    "took": 930,
    "timed_out": false,
    "num_reduce_phases": 2,
    "_shards": {
        "total": 581,
        "successful": 581,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 0,
            "relation": "eq"
        },
        "max_score": null,
        "hits": []
    }
}

但是当我单独搜索“8503fb5a”时,我得到了想要的结果。这意味着破折号仍然会导致问题,但我认为使用空格分析器应该可以解决这个问题?我做错了什么吗?
这些是我的领域。

crcmnpdw

crcmnpdw1#

您不需要使用whitespace分析仪。
您有两个选项可搜索整个UUID。
首先,您可以使用match查询,并将operator设置为and

{
  "query": {
    "match": {
      "log":{
        "query": "8503fb5a-3899-4305-8480-6ddc0f5df296",
        "operator": "and"
      } 

    }
  }
}

第二,您可以使用match_phrase查询,它将搜索完全匹配。

{
  "query": {
    "match_phrase": {
      "log": "8503fb5a-3899-4305-8480-6ddc0f5df296"
    }
  }
}

相关问题