按子串匹配

时间:2019-01-28 11:20:06

标签: elasticsearch

我需要获取old字段包含子字符串Description的文档。这是我的查询:

28/859

我得到的文件有:

  • { "explain": true, "query": { "bool":{ "filter":{ "bool":{"should":[{"query_string":{"default_field":"Description","query":"28//859", "analyzer": "keyword"}}]}}, "must_not":{"exists":{"field":"ParentId"}}} } } 28/859字段中(很好)
  • 但是我还通过Description字段中的28获得了文档(我不需要)

如何获取仅包含子字符串Description的文档?

更新:说明示例:

28/859

2 个答案:

答案 0 :(得分:1)

您可以为此使用whitespace分析器。使用description属性创建/更新您的映射,如下所示:

{
  "description": {
    "type": "text",
    "analyzer": "whitespace"
  }
}

这将确保将类似28/859的内容视为单个令牌。您甚至可以使用正则表达式创建自己的自定义标记生成器/分析器。然后,您可以使用下面的查询获取所需的结果:

{
  "query": {
    "query_string": {
      "default_field": "description",
      "query": "28\\/859"
    }
  }
}

答案 1 :(得分:0)

Match_Phrase应该满足要求。

示例代码:

GET <indexname>/_search
{

  "query": {
    "bool": {
      "must": [
        {
          "match_phrase": {
            "Description": """28/859"""
          }
        }
      ]
    }
  }
}