在使用[Elasticsearch]分析器之前,需要了解的内容总结

这个analyzer可以进行文本分析(将文本转换为最适合搜索的格式)。
在Elasticsearch中,它是最重要的功能之一。
这次我们总结了在使用这样的analyer之前,需要最低限度了解的内容。

环境

    • OS: Windows10

 

    • Elasticsearch: 7.9.1

 

    Kibana: 7.9.1

这个问题

以下是您希望了解的最低限内容摘要。

构成分析器的三个要素

分析器由字符过滤器、分词器和标记过滤器三个组件构成,它们各自的作用如下。

名称内容Character filters文字列に対し、Tokenizerで分割する前に必要な処理(追加、削除、変更)を行う。
前処理的ポジションで、使用は任意。Tokenizer文字列を単語レベルに分割する役割を持つ。
必須項目。Token filtersTokenizerで分割された内容に対し、必要な処理(追加、削除、変更)を行う。
後処理的ポジションで、使用は任意。

假设甲方案例: “心也会欢快地跳舞的轻快音乐”

    • Character filters:icu_normalizer, kuromoji_iteration_mark

 

    • Tokenizer:kuromoji_tokenizer

 

    Token filters:kuromoji_stemmer, ngram

进行文本分析后,结果如下。

image.png

※关于每个人的角色。

    • Elasticsearchを日本語で使う設定のまとめ | Qiita

 

    N-gram token filter | Elasticsearch Reference [7.9] | Elastic

请参考上面详细的说明。

2. 文本分析的对象

接下来,让我们了解一下哪些内容会成为文本分析的对象。

    • Elasticsearchに保存されているデータ

 

    クライアントに入力されて検索されるデータ

有两个选项。

通常情况下,建议使用相同的文本分析方法,而且默认情况下会使用相同的方法进行分析。但是,如果确实需要使用不同的分析方法,则可以在创建索引时使用mappings,在搜索分析器中指定后者(指用户输入并进行搜索的数据)的分析方法,如以下示例所示。

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "filter": {
        "autocomplete_filter": {
          "type": "edge_ngram",
          "min_gram": 1,
          "max_gram": 20
        }
      },
      "analyzer": {
        "autocomplete": { 
          "type": "custom",
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "autocomplete_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "text": {
        "type": "text",
        "analyzer": "autocomplete", 
        "search_analyzer": "standard" 
      }
    }
  }
}

※以上引用自Elasticsearch Reference [7.9]中search_analyzer | Elasticsearch Reference部分。

确认如何对文本进行分析。

为了确认目标是如何进行文本分析的,我们需要掌握一种方法。打开Kibana的Dev Tools,然后在左侧的输入框中输入并执行以下内容。

POST インデックス名(①)/_analyze
{
  "analyzer": "使用したいanalyzer名(②)",
  "text": "テキスト分析したい文字列(③)"
}

只需要一种选项,以下是对句子的中文本地化改写:
在这里,

    • ①インデックス名:対象のインデックス名

 

    • ②analyzer:独自で定義したanalyzer or Elasticsearchでデフォルトで使えるanalyzer(「4. デフォルトで使えるanalyzer」参照)

 

    ③text:テキスト分析したい文字列

请将其替换为中文并执行。

如果针对在“2. 文本分析的对象”中提到的索引进行操作的情况下。

    • インデックス名:my-index-000001

 

    • analyzer:autocomplete

 

    text:スラスラ書ける快適エディタ

隔壁,Kibana的执行内容如下。

POST my-index-000001/_analyze
{
  "analyzer": "autocomplete",
  "text": "スラスラ書ける快適エディタ"
}

4. 可以无需设置即可使用的分析器

在Elasticsearch中,您可以使用以下的分析器而不需要自行設定。
(有關自定義設定範例,請參閱“2.文本分析的對象”中所記載的索引定義(my-index-000001)。)
如果沒有指定任何內容,將使用標準分析器。

名称指定方法(※)説明Standard Analyzerstandard文法ベースのトークン化を行う(デフォルト)Simple Analyzersimple数字、スペース、ハイフン、アポストロフィなどの文字でないもの(非文字)でテキストをトークンに分割した後、非文字を破棄し、大文字を小文字に変換するWhitespace Analyzerwhitespace空白文字で分割を行うStop Analyzerstop基本はSimple Analyzerと同じだが、ストップワード(the, a, forなど)を削除するKeyword Analyzerkeyword入力文字列全体を1つのトークンとみなすLanguage Analyzersenglish、他指定言語(リンク先のページに記載のもの)のテキスト分析を行う(日本語は対象外)Fingerprint Analyzerfingerprintフィンガープリントアルゴリズムを用いる

将「3. analyzerでの分析結果確認方法」中的analyzer(②)指定到相应位置上。

5. 可用于日语分析的插件

为了进行日语文本分析,仅仅依靠Elasticsearch原装功能是不够的,因此需要额外使用插件。

以下的是代表性的嗎?
請安裝並使用必要的東西。

名称説明Japanese (kuromoji) Analysis Pluginatilikaによって作られた日本語形態解析エンジン
JavaベースJapanese (sudachi) Analysis Pluginワークス徳島人工知能NLP研究所によって作られた日本語形態解析エンジン
こちらもJavaベースICU Analysis Plugintokenizerというよりは、ICU Normalization CharFilter を前処理に用いる

有关Kuromoji和ICU,虽然在“构建分析器的三个要素”中也有提及过一次。

    Elasticsearchを日本語で使う設定のまとめ | Qiita

关于sudachi这个问题,

    ElasticsearchでSudachiとベクトル検索を組み合わせて使う方法 ①Sudachi導入編 | AI SHIFT

请参考相关详细说明。

结束

根据分析器的设置,搜索结果可能会有很大的差异。首先要掌握要点,确保能正确地进行设置。

请提供以下资料作为参考。

以下是本文未提及但我参考的网页列表。

1. 构成分析器的三个要素

    Anatomy of an analyzer | Elasticsearch Reference [7.9] | Elastic

4. 可立即使用的分析器,不需要進行任何設定。

    • Built-in analyzer reference | Elasticsearch Reference [7.9] | Elastic

 

    ストップワード とは 意味/解説/説明 【stop words】 | Web担当者Forum

5. 可以用于日语分析的插件.

    • Elasticsearch 日本語形態素解析のための文字列正規化の重要性 | Hello! Elasticsearch.

 

    • kuromoji| atilika

 

    ICU Analysis Plugin | Elasticsearch Plugins and Integrations [7.9] | Elastic
广告
将在 10 秒后关闭
bannerAds