46

我在使用轮胎宝石的弹性搜索中理解分析器的概念时遇到了麻烦。我实际上是这些搜索概念的新手。有人可以帮我写一些参考文章或解释分析仪的实际作用以及使用它们的原因吗?

我看到在 elasticsearch 中提到了不同的分析器,例如关键字、标准、简单、滚雪球。如果没有分析仪的知识,我无法弄清楚什么真正适合我的需要。

4

3 回答 3

84

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

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

要索引一个短语,将其分解为单词可能会很有用。分析仪来了。

它应用标记器和标记过滤器。分词器可以是空白分词器。它在每个空格处将一个短语拆分为标记。小写分词器将在每个非字母处拆分一个短语,并将所有字母小写。

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

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

您应该阅读分析指南并查看您拥有的所有不同选项。

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

您还可以使用分析 API来了解它的工作原理。很有用。

于 2012-10-11T18:58:32.620 回答
12

Lucene,分析器是分词器(拆分器)+词干分析器+停用词过滤器的组合

ElasticSearch中,分析器是

  1. Character filter: 在标记化之前“整理”一个字符串,例如删除 HTML 标签
  2. Tokenizer:它用于将字符串分解为单独的术语或标记。必须只有 1 个。
  3. Token filter:更改、添加或删除令牌。Stemmer 是令牌过滤器的一个示例。它用于获取单词 eg 的基础,happy并且happiness两者具有相同的基础 is happi

在此处查看Snowball 演示

这是一个示例设置:

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

参考:

  1. Lucene 分析器的比较
  2. http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/custom-analyzers.html
于 2015-01-16T04:12:00.577 回答
0

这是github repo上的一个很棒的插件。它是Analyze API的某种扩展。在官方弹性插件列表中找到它。

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

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

于 2015-06-19T17:22:20.473 回答