我无法理解使用轮胎宝石的弹性搜索中的分析器概念。我实际上是这些搜索概念的新手。有人可以在这里帮我一些参考文章,或者解释一下分析器的实际用途和使用原因吗?
我看到弹性搜索中提到了不同的分析器,如关键字,标准,简单,滚雪球。如果没有分析仪的知识,我无法弄清楚究竟是什么符合我的需要。
答案 0 :(得分:78)
让我给你一个简短的答案。
在索引时和搜索时使用分析器。 它用于创建术语索引。
要为短语编制索引,将其分解为单词可能很有用。 这是分析仪。
它应用了tokenizer和token过滤器。 tokenizer可以是Whitespace tokenizer。它在每个空间的标记中分割了一个短语。 小写标记器将在每个非字母和小写字母上分割短语。
令牌过滤器用于过滤或转换某些令牌。例如,ASCII折叠过滤器会将ê,é,è等字符转换为e。
分析仪是所有这些的混合物。
您应该阅读Analysis guide并查看您拥有的所有不同选项。
默认情况下,Elasticsearch应用标准分析器。它将删除所有常见的英语单词(以及许多其他过滤器)
您还可以使用Analyze Api了解其工作原理。非常有用。
答案 1 :(得分:10)
在Lucene
中,分析器是tokenizer(splitter)+ stemmer + stopword filter的组合
在ElasticSearch
中,分析器是
Character filter
:"整理"标记化之前的字符串。例:
删除HTML标记Tokenizer
:必须有一个标记器。它曾用于将字符串分解为单个术语或标记Token filter
:更改,添加或删除令牌。 Stemmer是令牌过滤器的一个例子,它用于获取单词的基础,例如:" happy"," happiness" => "本刊" 这是我系统的设置:
{
"settings":{
"index" : {
"analysis" : {
"analyzer" : {
"analyzerWithSnowball" : {
"tokenizer" : "standard",
"filter" : ["standard", "lowercase", "englishSnowball"]
}
},
"filter" : {
"englishSnowball" : {
"type" : "snowball",
"language" : "english"
}
}
}
}
}
}
参考:
答案 2 :(得分:0)
这是github repo上的一个很棒的插件。它有点延伸Analyze API。在官方弹性插件list上找到它。
最棒的是它在每一步之后都会显示具有所有属性的标记。有了这个,很容易调试分析仪配置,看看为什么我们有这样的令牌,以及我们丢失了我们想要的那些。
希望我比今天更早发现它。多亏了我刚刚发现为什么我的keyword_repeat
令牌标记器似乎无法正常工作。问题是由下一个令牌过滤器引起的:icu_transform
(用于音译),遗憾的是它不尊重关键字属性并转换了所有令牌。如果不是这个插件,我不知道如何找到原因。