我在看http://euphonious-intuition.com/2012/08/more-complicated-mapping-in-elasticsearch/,它解释了ElasticSearch分析器。
我不明白有不同的搜索和索引分析器的部分。第二个自定义映射示例如下所示:
->the索引分析器是一个edgeNgram
->the搜索分析器是:
"full_name":{
"filter":[
"standard",
"lowercase",
"asciifolding"
],
"type":"custom",
"tokenizer":"standard"
}如果我们希望查询"Race“不返回结果,比如*ra*pport和*rac*ial (由于edgeNgram ),那么为什么首先用edgeNgram来索引它呢?
请举例说明不同的分析器是有用的。
发布于 2013-04-10 17:47:53
通常在索引时间和查询时间都有类似的分析链。相似并不意味着完全相同,但通常索引文档的方式反映了查询文档的方式。
不过,ngram示例非常适合,因为它是在索引和查询时使用不同分析器的主要原因之一。
对于部分匹配,可以用边ngram索引,这样"elasticsearch“就会变成(使用mingram 3和maxgram 20):
"ela“、"elas”、"elast“、”弹性海“、”弹性“、"eleasticsearc”和"elasticsearch“
现在让我们查询创建的字段。如果我们查询“弹性”这个术语,就会得到一个匹配的结果,并得到预期的结果。我们基本上把上面所说的部分匹配变成了一个精确的匹配,考虑到我们索引的内容。也没有必要将ngram应用于查询。如果我们这样做了,我们将查询以下所有术语:
"ela“、"elas”、"elast“、”弹性“和”弹性“
这将使查询更加复杂,也会导致奇怪的结果。假设您在另一个文档中索引了术语“”,相同的字段。你会有以下几个问题:
"ela“、"elap”、“elap”、
如果您搜索“弹性”并对查询生成ngram,术语"ela“也将与第二个文档相匹配,因此您将把它与第一个文档一起使用,即使没有一个术语包含您所要寻找的整个”弹性“术语。
我建议你看看analyze api,看看不同的分析器及其不同的结果。
发布于 2014-11-13 21:52:37
引用the official documentation about index vs search analyzers
偶尔,在索引和搜索时间使用不同的分析器是有意义的。例如,在索引时,我们可能希望索引同义词,例如,对于每一次出现的快速,我们也索引快速,快速。但是在搜索的时候,我们不需要搜索所有这些同义词。相反,我们只需查找用户输入的单个单词,无论是快速、快速、快速还是快速。 为了实现这种区别,Elasticsearch还支持index_analyzer和search_analyzer参数以及名为default_index和default_search的分析器。 考虑到这些额外的参数,索引时的完整序列实际上如下所示:
在搜索时间:
https://stackoverflow.com/questions/15923480
复制相似问题