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