在使用[Elasticsearch]分析器之前,需要了解的内容总结
这个analyzer可以进行文本分析(将文本转换为最适合搜索的格式)。
在Elasticsearch中,它是最重要的功能之一。
这次我们总结了在使用这样的analyer之前,需要最低限度了解的内容。
环境
-
- OS: Windows10
-
- Elasticsearch: 7.9.1
- Kibana: 7.9.1
这个问题
以下是您希望了解的最低限内容摘要。
构成分析器的三个要素
分析器由字符过滤器、分词器和标记过滤器三个组件构成,它们各自的作用如下。
前処理的ポジションで、使用は任意。Tokenizer文字列を単語レベルに分割する役割を持つ。
必須項目。Token filtersTokenizerで分割された内容に対し、必要な処理(追加、削除、変更)を行う。
後処理的ポジションで、使用は任意。
假设甲方案例: “心也会欢快地跳舞的轻快音乐”
-
- Character filters:icu_normalizer, kuromoji_iteration_mark
-
- Tokenizer:kuromoji_tokenizer
- Token filters:kuromoji_stemmer, ngram
进行文本分析后,结果如下。

※关于每个人的角色。
-
- 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)。)
如果沒有指定任何內容,將使用標準分析器。
将「3. analyzerでの分析結果確認方法」中的analyzer(②)指定到相应位置上。
5. 可用于日语分析的插件
为了进行日语文本分析,仅仅依靠Elasticsearch原装功能是不够的,因此需要额外使用插件。
以下的是代表性的嗎?
請安裝並使用必要的東西。
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