Elasticsearch - 如何在 json 文档中搜索与特殊字符 (-) 完全匹配的字符串

Elasticsearch - how to search exact string match with special charater (-) in the json document

我一直在使用 ES 5.x 版本,这是我的示例数据集 json。

{"id":"1"}
{.... "company" : "HCL-US",....}
{"id":"2"}
{.... "company" : "HCL",....}
{"id":"3"}
{.... "company" : "HCL-IND",....}
{"id":"4"}
{.... "company" : "HCL-AUS",....}

我如何搜索并获得谁属于 "HCL-US"。我尝试使用此查询“_search?q=company:"HCL-US"”,它返回 HCL * 结果。我怎样才能将精确的字符串与特殊字符串匹配。

1/ 您可以在 company 字段的映射中指定一个 whitespace analyzer。该分析器将仅在空格上拆分查询,而标准将在非字母数字字符上拆分。

标准分析器是在未定义分析器时使用的分析器。

2/ 或者您可以查询 company.keyword,这是自 5.X 以来自动为文本字段创建的字段。此关键字未被分析,您可以安全地对其使用术语查询来进行精确匹配。

您可以使用 Term Query 来匹配确切的字词。假设 company 是一个 text 字段,您将得到相同的 keyword 版本,下面的查询应该做必要的

{

 "query": {
  "term": {
    "company.keyword": {
    "value": "HCL-US"
    }
  }
 }
}