Elasticsearch - 查询原始字段

时间:2016-08-29 19:00:25

标签: elasticsearch

我正在使用ES创建一个预先搜索。我希望部分匹配我有一个ngram分析器。另外,我希望在字段开头匹配的内容更高,所以我有一个提升的prefix_phrase查询。

我的问题是我需要查询prefix_phrase中的原始值,否则它将匹配所有匹配的ngrams,而不是给我我想要的。

示例:

emails: [test_123@gmail.com, 123_something@facebook.com]
search: 123

我希望123_something先回来。但由于ngram分析器,值123@gmail.com也匹配前缀查询。

有没有办法查询分析字段的原始值(也就是实际存储在文档中的值)

像这样的东西

{
   match: {
       query: 123
       type: 'prefix'
       fields: ["email"]
       original: 1
   }
}

或者我是否只需将原始值存储在单独的字段中?

这个答案:search a analyzed field through the stored original value in elasticsearch指向不存在的文档。看起来不推荐使用多字段值。

1 个答案:

答案 0 :(得分:1)

在这种情况下,最好的方法是多字段,实际上,最近的文档已经进行了一些重组。您将了解有关多字段here的更多信息。

  

为不同目的以不同方式索引相同字段通常很有用。例如,字符串字段可以被索引为用于全文搜索的分析字段,并且可以被编索为用于排序或聚合的not_analyzed字段。或者,您可以使用标准分析器,英语分析器和法语分析器索引字符串字段。

     

这是多领域的目的。大多数数据类型都通过fields参数支持多字段。

您可以找到here的完整示例。