弹性搜索 match_pharse 查询无法正常工作

Elastic search match_pharse query is not working properly

我正在尝试在 kibana 中使用 match_phrase 查询来搜索以下文档,但没有得到响应。

请在elastic search中找到下面的文档

    {  
       "took":7,
       "timed_out":false,
       "_shards":{  
          "total":5,
          "successful":5,
          "skipped":0,
          "failed":0
       },
       "hits":{  
          "total":2910,
          "max_score":1.0,
          "hits":[  
             {  
                "_index":"documents",
                "_type":"doc",
                "_id":"DmLD22MBFTg0XFZppYt8",
                "_score":1.0,
                "_source":{  
                   "doct_country":"DE",
                   "filename":"series_Accessories_v1_de-DE.pdf",


             }

          ]
       }
    }

请找到用于搜索上述文档的查询。

GET documents/_search
{
    "query": {
        "match_phrase" : {
            "message" : "Accessories_v1_de-DE.pdf"
        }
    }
}

对于上述查询,我​​得到了这样的回复:

{
  "took": 0,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 0,
    "max_score": null,
    "hits": []
  }
}

有两个问题。据推测,在您的查询中,您的意思是使用 filename 字段而不是 message,它在您的示例文档中不存在:

GET documents/_search
{
    "query": {
        "match_phrase" : {
            "filename" : "Accessories_v1_de-DE.pdf"
        }
    }
}

其次,您需要 Elasticsearch 知道 filename 字段应该被索引, _ 被视为一个拆分。默认情况下不会发生这种情况。一种方法是按如下方式定义您的映射:

PUT /documents
{
    "mappings" : {
        "document" : {
            "properties" : {
                "filename" : { "type" : "text", "analyzer": "simple" }
            }
        }
    }
}

简单分析器将拆分任何非字母,因此 _ 和数字将被视为拆分。根据您的应用程序,您可能需要对标记化进行更细粒度的控制。参见documentation