我正在查看 http://euphonious-intuition.com/2012/08/more-complicated-mapping-in- elasticsearch/ ,其中介绍了ElasticSearch分析器。
我不了解有关使用不同的搜索和索引分析器的部分。自定义映射的第二个示例是这样的: ->索引分析器是edgeNgram-
搜索分析器是:
"full_name":{ "filter":[ "standard", "lowercase", "asciifolding" ], "type":"custom", "tokenizer":"standard" }
如果我们希望查询“ Race” 由于edgeNgram 不返回诸如 ra * pport和 rac * ial之类的结果,为什么要首先使用edgeNgram对其进行索引?
请举例说明不同的分析仪有用。
通常在索引时间和查询时间您都具有类似的分析链。相似并不意味着完全相同,但是通常索引文档的方式反映了查询文档的方式。
ngrams示例非常合适,因为它是您在索引和查询时使用不同分析器的主要原因之一。
对于部分匹配,可以使用边缘ngram进行索引,以便“ elasticsearch”成为(使用mingram 3和maxgram 20):
“ ela”,“ elas”,“ elast”,“ elasti”,“ elastic”,“ elastics”,“ elasticse”,“ elasticsea”,“ elasticsear”,“ eleasticsearc”和“ elasticsearch”
现在查询创建的字段。如果查询“弹性”一词,则表示匹配,并且返回预期结果。给定索引后,我们基本上使部分匹配之上的我们称为完全匹配。也无需对查询应用ngram。如果这样做,我们将查询以下所有术语:
“ ela”,“ elas”,“ elast”,“ elasti”和“ elastic”
这将使查询方式更加复杂,并导致获得奇怪的结果。假设您在另一个文档的同一字段中为术语“经过”编制了索引。您将具有以下ngram:
“ ela”,“ elap”,“ elaps”,“ elapse”,“ elapsed”
如果您搜索“ elastic”并对查询进行ngram运算,则术语“ ela”也将与第二个文档匹配,因此即使没有任何术语包含完整的“ elastic”术语,您也会将其与第一个文档一起返回。在寻找。
我建议您看一下分析API,以使用不同的分析器及其不同的结果。