在Elasticsearch匹配查询中如何处理斜杠

时间:2017-01-18 19:18:46

标签: elasticsearch indexing mapping match

我有匹配查询搜索某种类型的文档:

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

" EAAQnb1kMr / E2 / ADqo"是我想要匹配的字符串,但是在搜索结果中我可以看到多个记录,其中包含子字符串" / e2 /"也退还了。 看起来像" / e2 /"是单独索引,这样就可以发生。我认为匹配查询是进行全文匹配...是因为我在创建模板时遗漏了什么?有什么想法吗?

加载项而不是reindex,如何修改查询以匹配查询中的确切值?

1 个答案:

答案 0 :(得分:0)

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

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

因此,这将索引以下单词'EAAQnb1kMr','e2'和'ADqo'。因此,您的查询值也将按照索引字段的方式进行分析。这就是为什么带有'e2'的文件也被退回的原因。

如果您不需要对'ph1_enc'字段进行标记,则只需在映射中将其类型设置为'keyword'即可。

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

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

我希望它有所帮助。