弹性搜索中的分析器

时间:2012-10-11 09:41:43

标签: elasticsearch analyzer tire

我无法理解使用轮胎宝石的弹性搜索中的分析器概念。我实际上是这些搜索概念的新手。有人可以在这里帮我一些参考文章,或者解释一下分析器的实际用途和使用原因吗?

我看到弹性搜索中提到了不同的分析器,如关键字,标准,简单,滚雪球。如果没有分析仪的知识,我无法弄清楚究竟是什么符合我的需要。

3 个答案:

答案 0 :(得分:78)

让我给你一个简短的答案。

在索引时和搜索时使用分析器。 它用于创建术语索引。

要为短语编制索引,将其分解为单词可能很有用。 这是分析仪。

它应用了tokenizer和token过滤器。 tokenizer可以是Whitespace tokenizer。它在每个空间的标记中分割了一个短语。 小写标记器将在每个非字母和小写字母上分割短语。

令牌过滤器用于过滤或转换某些令牌。例如,ASCII折叠过滤器会将ê,é,è等字符转换为e。

分析仪是所有这些的混合物。

您应该阅读Analysis guide并查看您拥有的所有不同选项。

默认情况下,Elasticsearch应用标准分析器。它将删除所有常见的英语单词(以及许多其他过滤器)

您还可以使用Analyze Api了解其工作原理。非常有用。

答案 1 :(得分:10)

Lucene中,分析器是tokenizer(splitter)+ stemmer + stopword filter的组合

ElasticSearch中,分析器是

的组合
  1. Character filter:"整理"标记化之前的字符串。例: 删除HTML标记
  2. Tokenizer:必须有一个标记器。它曾用于将字符串分解为单个术语或标记
  3. Token filter:更改,添加或删除令牌。 Stemmer是令牌过滤器的一个例子,它用于获取单词的基础,例如:" happy"," happiness" => "本刊"
  4. 请参阅Snowball demo here

    这是我系统的设置:

         {
          "settings":{
            "index" : {
                "analysis" : {
                    "analyzer" : {
                        "analyzerWithSnowball" : {
                            "tokenizer" : "standard",
                            "filter" : ["standard", "lowercase", "englishSnowball"]
                        }
                    },
                    "filter" : {
                        "englishSnowball" : {
                            "type" : "snowball",
                            "language" : "english"
                        }
                    }
                }
            }
          }
        }
    

    参考:

    1. Comparison of Lucene Analyzers
    2. http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/custom-analyzers.html

答案 2 :(得分:0)

这是github repo上的一个很棒的插件。它有点延伸Analyze API。在官方弹性插件list上找到它。

最棒的是它在每一步之后都会显示具有所有属性的标记。有了这个,很容易调试分析仪配置,看看为什么我们有这样的令牌,以及我们丢失了我们想要的那些。

希望我比今天更早发现它。多亏了我刚刚发现为什么我的keyword_repeat令牌标记器似乎无法正常工作。问题是由下一个令牌过滤器引起的:icu_transform(用于音译),遗憾的是它不尊重关键字属性并转换了所有令牌。如果不是这个插件,我不知道如何找到原因。