Elasticsearch 子字符串必须包含在字段中

Elasticsearch substring must be contained in field

我有以下查询:

GET _search
{
  "query": {
    "bool" : {
      "must" : {
        "match" : {  "log": "a perfect phrase" }
      },
     "filter": 
        {
          "range": {
            "time": {
               "gte": "now-10m",
               "lte": "now"
            }
          }
        }
    }
  }
}

但是,我有时会收到包含 a perfect phrase 中的某些单词但不完全是 a perfect phrase 的文档。我只想保留包含这个确切字符串的文档,而不是包含几乎这个字符串的文档。

由于这个字符串通常包含在更大的文档中,可以包含随机数据,我不认为我可以使用 term 关键字。

如何查找 log 字段恰好包含此字符串的所有文档?

您可以使用 match_phrase 而不是 match

基本上您的搜索查询如下:

GET your-index-name/_search
{
  "query": {
    "bool" : {
      "must" : {
        "match_phrase" : {  "log": "a perfect phrase" }
      },
     "filter": 
        {
          "range": {
            "time": {
               "gte": "now-10m",
               "lte": "now"
            }
          }
        }
    }
  }
}

请参阅此 link 了解更多信息。