ElasticPress 3.0

閲覧数: 41(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閑話, 公開タグ, , , ,
ページナビのテキスト
2021年4月1日

記事ページの下部に前後の記事(投稿)へのリンクが表示される仕様なのだが、「カテゴリーに制限」をかけて  続きを読む

閲覧数まとめ
blank
2021年3月25日

閃きついでに総合計と週合計をフラグで制御する方式に変更してみた。これまではベタに関数をまるまるコピー  続きを読む

閃きは大事だw
blank
2021年3月23日

このサイトは、あくまでもCMSであるWordPressの構築やクラウドであるAWSの運用ノウハウ取得  続きを読む

ElasticPress 3.5.6
blank
2021年3月19日

マイナーバージョンアップにも関わらず、検索スコアリングのパラメータが微調整された結果、期待する検索結  続きを読む

管理画面を制限する
blank
2021年2月22日

このサイトではネット上のさまざまな攻撃からの防御のため、Wordfenceプラグインの無料版を使用し  続きを読む

検索精度を高める
blank
2020年11月1日

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

スポンサーリンク

コメントを残す

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