Pav*_*utt 37 search 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"
}
Run Code Online (Sandbox Code Playgroud)
如果我们希望查询"Race"不返回像*ra*pport和*rac*ial这样的结果,因为edgeNgram,为什么首先用edgeNgram索引它?
请解释一下不同分析仪有用的示例.
jav*_*nna 81
您通常在索引时和查询时都有类似的分析链.类似的并不完全相同,但通常您索引文档的方式反映了您查询它们的方式.
ngrams示例非常合适,因为它是您在索引和查询时使用不同分析器的主要原因之一.
对于部分匹配,您使用edge ngrams进行索引,以便"elasticsearch"变为(使用mingram 3和maxgram 20):
"ela","elas","elast","elasti","elastic","elastics","elasticse","elasticsea","elasticsear","eleasticsearc"和"elasticsearch"
我们现在查询创建的字段.如果我们查询术语"弹性",则匹配并返回预期结果.鉴于我们索引的内容,我们基本上已成为我们所谓的上述部分匹配的精确匹配.也没有必要将ngrams应用于查询.如果我们这样做,我们将查询以下所有条款:
"ela","elas","elast","elasti"和"elastic"
这会使查询方式变得更加复杂,并导致获得奇怪的结果.假设您在另一个文档(同一个字段)中索引术语"已过去".你会得到以下ngram:
"ela","elap","elaps","elapse","elapsed"
如果您搜索"弹性"并对查询生成ngrams,则术语"ela"也会与第二个文档匹配,因此您可以将其与第一个文档一起取回,即使没有术语包含整个"弹性"术语您正在寻找.
我建议你看一下使用不同的分析仪和不同的结果来分析api.
要参考有关索引与搜索分析器的官方文档:
有时,在索引和搜索时使用不同的分析器是有意义的.例如,在索引时我们可能想要对同义词进行索引,例如,对于每次快速出现,我们也快速,快速和快速地索引.但在搜索时,我们不需要搜索所有这些同义词.相反,我们可以查找用户输入的单个单词,无论是快速,快速,快速还是快速.
为了实现这种区分,Elasticsearch还支持index_analyzer和search_analyzer参数,以及名为default_index和default_search的分析器.
考虑到这些额外的参数,索引时的完整序列看起来像这样:
- index_analyzer在字段映射中定义,否则
- 在字段映射中定义的分析器,否则
- 否则,在文档的_analyzer字段中定义的分析器
- 类型的默认index_analyzer,默认为
- 类型的默认分析器,默认为
- 索引设置中的分析器名为default_index,默认为
- 分析器在索引设置中命名为default,默认为
- 分析器在节点级别命名为default_index,默认为
- 分析器在节点级别命名为default,默认为
- 标准分析仪
在搜索时间:
- 查询器本身定义的分析器,否则
- search_analyzer在字段映射中定义,否则
- 在字段映射中定义的分析器,否则
- 类型的默认search_analyzer,默认为
- 类型的默认分析器,默认为
- 索引设置中名为default_search的分析器,默认为
- 分析器在索引设置中命名为default,默认为
- 分析器在节点级别命名为default_search,默认为
- 分析器在节点级别命名为default,默认为
- 标准分析仪
| 归档时间: |
|
| 查看次数: |
23113 次 |
| 最近记录: |