ElasticPress 3.0

閲覧数: 37(1)

ここのところElasitcsearch関連の話が多いなと思っていたら「ElasticPress」がバージョンアップ(3.0)したことに伴い、またまたElasticsearch関連の話題となりました。今回はメジャーバージョンアップ(2->3)のようでフォルダ構成なども変わっています。これまでプラグインルートに存在したclassesがincludesの下に移動しさらに中のフォルダ構成も大きく変わっています。

drwxr-xr-x 4 www-data   4096 May 14 20:45 assets/
-rw-r--r-- 1 www-data  10137 May 14 20:45 composer.lock
drwxr-xr-x 4 www-data   4096 May 14 20:45 dist/
-rw-r--r-- 1 www-data   5811 May 14 20:45 elasticpress.php
drwxr-xr-x 2 www-data   4096 May 14 20:45 images/
drwxr-xr-x 5 www-data   4096 May 14 20:45 includes/
drwxr-xr-x 2 www-data   4096 May 14 20:45 lang/
-rw-r--r-- 1 www-data 361175 May 14 20:45 package-lock.json
-rw-r--r-- 1 www-data  32789 May 14 20:45 readme.txt
-rw-r--r-- 1 www-data   2217 May 14 20:45 uninstall.php

「マッピング」は従来通りincludesの下ですがmapping以下が大きく変わってpostとuserというフォルダ構成になりました。これは設定でマッピングのユーザーによる指定が可能になるための変更のようですが、マッピングの「言語」対応と合わせてバージョン3の目玉のようなのですが、残念ながら「日本語」に対しては全く機能していませんでした。ということで、いつものようにコアを直接変更します。この辺は完全に自己責任です。

return array(
	'settings' => array(
		'index.mapping.total_fields.limit' => apply_filters( 'ep_total_field_limit', 5000 ),
		'index.max_result_window'          => apply_filters( 'ep_max_result_window', 1000000 ),
		'analysis'                         => array(
			'analyzer'   => array(
				'default'          => array(
//					'tokenizer'   => 'standard',
					'tokenizer'   => 'sudachi_tokenizer',
//					'filter'      => array( 'standard', 'ewp_word_delimiter', 'lowercase', 'stop', 'ewp_snowball' ),
                    'filter' => array( 'part_of_speech', 'baseform', 'ja_stop', 'normalizedform', 'standard', 'ewp_word_delimiter', 'lowercase', 'stop', 'ewp_snowball' ),
//					'char_filter' => array( 'html_strip' ),
                    'char_filter' => array( 'html_strip', 'icu_normalizer', 'kuromoji_iteration_mark' ),
					'language'    => apply_filters( 'ep_analyzer_language', 'english', 'analyzer_default' ),
				),
				'shingle_analyzer' => array(
					'type'      => 'custom',
					'tokenizer' => 'standard',
					'filter'    => array( 'lowercase', 'shingle_filter' ),
				),
				'ewp_lowercase'    => array(
					'type'      => 'custom',
					'tokenizer' => 'keyword',
					'filter'    => array( 'lowercase' ),
				),
			),
			'filter'     => array(
                'part_of_speech' => array(
                    'type' => 'sudachi_part_of_speech',
                    'stoptags' => array( '助詞', '助動詞', '補助記号,句点', '補助記号,読点' ),
                ),
                'baseform' => array(
                    'type' => 'sudachi_baseform',
                ),
                'ja_stop' => array(
                    'type' => 'sudachi_ja_stop',
                    'stoptags' => array( '_japanese_', 'は', 'です' ),
                ),
                'normalizedform' => array(
                    'type' => 'sudachi_normalizedform',
                ),	
				'shingle_filter'     => array(
					'type'             => 'shingle',
					'min_shingle_size' => 2,
					'max_shingle_size' => 5,
				),
				'ewp_word_delimiter' => array(
					'type'              => 'word_delimiter',
					'preserve_original' => true,
				),
				'ewp_snowball'       => array(
					'type'     => 'snowball',
					'language' => apply_filters( 'ep_analyzer_language', 'english', 'filter_ewp_snowball' ),
				),
				'edge_ngram'         => array(
					'side'     => 'front',
					'max_gram' => 10,
					'min_gram' => 3,
					'type'     => 'edgeNGram',
				),
			),
			'normalizer' => array(
				'lowerasciinormalizer' => array(
					'type'   => 'custom',
					'filter' => array( 'lowercase', 'asciifolding' ),
				),
			),
		),
	'number_of_replicas' => 0,
	),

検索用のAPIはclassesの下ですが、以前の「class-ep-api.php」から大きく変わって「elasticpress/includes/classes/Indexable/Post」の下の「Post.php」となりました。「fuzziness」の設定が検索結果を汚くしていたのでコメント化してしまいます。この辺の精度は「Sudachi」の辞書頼りです。

                    array(
                        'multi_match' => array(
                            'query'     => '',
                            'fields'    => $search_fields,
                            'boost'     => apply_filters( 'ep_match_boost', 2, $search_fields, $args ),
                            'fuzziness' => 0,
                            'operator'  => 'and',
                        ),
                    ),
                    array(
                        'multi_match' => array(
                            'fields'    => $search_fields,
                            'query'     => '',
//                          'fuzziness' => apply_filters( 'ep_fuzziness_arg', 1, $search_fields, $args ),
                        ),
                    ),

新バージョンではインデックス名が変更されたのでサーバー上に新たなインデックスを作成しますが旧バージョンのインデックスを残したままの大変残念な仕様となっていますので新バージョンの稼動確認出来たら手でインデックスを削除する必要があります。

curl localhost:9200/_cat/indices?v
health status index                           uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   arigatojp-1                     W9UisYw2SVqQk3I2abVeYA   5   0        536            0      7.8mb          7.8mb
green  open   arigatojp-post-1                DrtFyb7STou7mK072AApbg   5   0        536            0      7.4mb          7.4mb

「-1」が旧バージョンのインデックスで「-post-1」が新バージョンのインデックスです。ちなみにUser設定を使用すると「-user」となるようです。何れにしても個人的には古いインデックスを残す謎の仕様です。

【最終更新日: 2020年10月22日】
カテゴリーIT閑話, 公開タグ, , , ,
検索精度を高める
2020年11月1日

検索ネタを連発するのはElasticsearchやElasticPresがバージョンアップした時のお  続きを読む

ElasticPress日本語設定2020年版
blank
2020年10月29日

ElasticsearchをWordpressで利用するためのプラグインであるElasticPres  続きを読む

ElasticPress 3.5
blank
2020年10月22日

Elasticsearch用のプラグインであるElasticPressがメジャーバージョンアップ(3  続きを読む

Elasticsearch 6.8.11
blank
2020年10月2日

2017年末に「2.4.6」から「5.6.5」へバージョンアップして以来の大幅バージョンアップです。  続きを読む

パンくずリスト詳細
blank
2020年5月12日

テーマの「マイナーチェンジ」に伴って「パンくずリスト」の仕様を若干変更しました。一つ前のテーマではパ  続きを読む

カテゴリーを制限する
blank
2020年5月11日

過去に何度も書いた「カテゴリー制限」の話、元はと言えば初期に書かれた「非公開」の記事が原因です。トッ  続きを読む

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください