【问题标题】:In Elasticsearch match query how to deal with slash在 Elasticsearch 匹配查询中如何处理斜线
【发布时间】:2017-06-03 07:40:17
【问题描述】:

我有一个匹配查询正在搜索一种文档:

{
  "query": {
    "bool": {
      "should": {
        "match": {
          "ph1_enc": "EAAQnb1kMr/e2/ADqo"
        }
      }
    }
  }
}

“EAAQnb1kMr/e2/ADqo”是我要匹配的字符串,但是在搜索结果中我可以看到多个带有子字符串“/e2/”的记录也被返回。 看起来“/e2/”是单独索引的,所以可能会发生这种情况。我以为匹配查询是做全文匹配...是不是因为我在创建模板时错过了一些东西?有什么想法吗?

附加组件而不是重新索引,如何修改查询以匹配查询中的确切值?

【问题讨论】:

    标签: elasticsearch indexing mapping match


    【解决方案1】:

    您在映射中设置了哪个分析器来索引您的数据?

    如果您使用的是默认的(标准分析器),那么根据文档,这使用 default tokenizer 似乎也用斜杠('/')分割文本。文档重定向 here 以获取有关标记器的更多信息。

    因此,这将索引以下单词“EAAQnb1kMr”、“e2”和“ADqo”。因此,您的查询值也将按照字段的索引方式进行分析。这就是为什么还会返回带有“e2”的文档。

    如果您不需要标记“ph1_enc”字段,您可以在映射中将其类型设置为“关键字”。

    "properties": {
        "ph1_enc": {
          "type": "keyword"
        }
     }
    

    这不会分析该字段,它会在您查询时完全匹配。

    希望对你有帮助。

    【讨论】:

    • 感谢您的回复。现在这是有道理的,因为查询也被分析了。那么问题来了,如果我更新映射,我是否必须重新索引整个数据?
    • 是的,您必须重新索引数据。检查reindex apiindex aliases,这样你就可以让这个过程更容易:)
    猜你喜欢
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2013-11-10
    • 1970-01-01
    相关资源
    最近更新 更多