ElasticPress 3.0

閲覧数: 32(0)

ここのところ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」となるようです。何れにしても個人的には古いインデックスを残す謎の仕様です。

【最終更新日: 2019年6月4日】
カテゴリーIT閑話, 公開タグ, , ,
パンくずリスト詳細
2020年5月12日

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

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

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

マイナーチェンジ
blank
2020年3月23日

かれこれ一年近くほったらかしだったので、気合をいれて「テーマ変更」と思っていたのですが、、、いろいろ  続きを読む

6月の検索ワードまとめ
blank
2019年6月30日

6月の検索ワードのまとめです。 意外なところで「zabbixダウングレード」が複数回検索され、単独の  続きを読む

アクセシビリティ対策
blank
2019年6月23日

テーマカスタマイズの一環で、トップページに一覧表示されている「写真を左右交互に表示する」ようにした際  続きを読む

dockerとproxy
blank
2019年6月18日

dockerやdocker-composeをプロキシ環境下で使うのに苦労したので忘れないようにメモし  続きを読む

コメントを残す

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