当查询文本是子字符串时,Elasticsearch 完全匹配

Posted

技术标签:

【中文标题】当查询文本是子字符串时,Elasticsearch 完全匹配【英文标题】:Elasticsearch exact matches when query text is a substring 【发布时间】:2014-08-27 17:34:05 【问题描述】:

我的 Elasticsearch 中有一个字段的数据

PUT /logs/visited_domains/1

"visited_domain":"microsoft.com"

PUT /logs/visited_domains/2

"visited_domain":"not-microsoft.com"

映射为:


  "properties": 
    "visited_domain": 
      "type": "string",
      "index": "not_analyzed"
    
  

当我进行 ElasticSearch 时


  "query": 
    "filtered": 
      "filter": 
        "term": 
          "visited_domain": "microsoft.com"
        
      
    
  

我会得到这两个结果。但我只想要完全匹配。关于如何更改查询或改进映射的任何想法?

编辑:我将我的一个示例从notmicrosoft.com 更改为not-microsoft.com,因为这个破折号造成了很多麻烦。 notmicrosoft.com 不会返回,但 not-microsoft.com 在搜索 microsoft.com 时会返回。

【问题讨论】:

【参考方案1】:

使用 query_string 与引号一起使用时给出完全匹配

 "query": 
     "query_string": 
          "default_field": "visited_domain",
                "query": "\"microsoft.com\""
                
  

【讨论】:

我设法使用这种方法解决了我的确切问题。如果我的查询是一个变量,我不确定如何包含引号。

以上是关于当查询文本是子字符串时,Elasticsearch 完全匹配的主要内容,如果未能解决你的问题,请参考以下文章

什么是子查询

ElasticSearch 在Java中的各种实现

ElasticSearch结构化查询

ElasticSearch序列 - SpringBoot整合ES:范围查询 range

ElasticSearch 常用的查询过滤语句

Elasticsearch系列(13)Query之全文查询