一尘不染

Elastic search-search_analyzer与index_analyzer

elasticsearch

我正在查看 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对其进行索引?

请举例说明不同的分析仪有用。


阅读 865

收藏
2020-06-22

共1个答案

一尘不染

通常在索引时间和查询时间您都具有类似的分析链。相似并不意味着完全相同,但是通常索引文档的方式反映了查询文档的方式。

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,以使用不同的分析器及其不同的结果。

2020-06-22