Full-Text Search プラグイン

日本語対応の全文検索プラグインです。

説明

WordPress のサイト検索 (検索ページなどのワード検索) を、LIKE 検索から日本語全文検索 (MySQL + Ngram パーサーまたは Mroonga エンジン + TokenMecab パーサー) に置き換えます。これにより検索のパフォーマンスが大幅に向上します。

また、HTML タグを除いた純粋な文字列 (プレーンテキスト) で検索します。これにより HTML タグが検索されるようなことがなくなります。

検索用のデータ (インデックス) は、専用のテーブルに保存されます。既存のテーブル構造や投稿データ (posts テーブル) を書き換えることはありません。

PDF (自動テキスト抽出機能はβ版扱い)、Word (doc、docx)、Excel (xlsx) および PowerPoint (pptx) ファイルのテキストを検索します。

検索対象テキストを設定するフィールド (投稿は「full_text_search_search_text」カスタムフィールド、メディアは「検索テキスト」項目) を使用できます。

WordPress マルチサイトに対応しています。

外部サービスを一切使用していません。PDF ファイルなどを外部のサーバーへ送信することはありません。

使い方

プラグインを有効化するだけで、標準のワード検索が全文検索になります。設定画面で全文検索の無効化、検索ページのみ有効化などが設定できます。

全文検索メンテナンス (管理画面メニューより [設定]-[全文検索]-[メンテナンス] タブ) より、全文検索インデックスをメンテナンスすることができます。通常の運用では操作することはありません。データベースの投稿データを直接変更した場合に、投稿データとインデックスの不整合が起きた場合に操作します。

「full_text_search_search_text」という名前のカスタムフィールドを作成すると、その値 (テキスト) は検索対象となります。

検索文字列オプション

下記のような Google ライクの検索オプション (演算子) が使えます。

  • OR (大文字) – 検索を結合します。例: foo OR bar
  • - – 検索から語句を除外します。例: foo -bar
  • "" – 完全一致を検索します。例: “foo bar”
  • * – ワイルドカードで検索します。Mroonga のみ。例: foo*
  • () – グルーピングします。Mroonga のみ。例: (foo OR bar) baz

全文検索設定

全文検索の設定を行います。

全文検索設定画面

設定項目

設定項目説明
全文検索全文検索の有効または無効を設定します。
「有効」はすべてのワード検索 (管理画面や WP_Query、get_posts() を含む) で全文検索が有効になります。「検索ページのみ有効」は検索ページのみで全文検索が有効になります。
初期値は「有効」です。
暗黙のブール論理検索ワードの AND または OR を設定します。
初期値は「AND」です。
※ バージョン2.4以前のみ
ソート順ソート順 (デフォルトまたは検索スコア) を設定します。
「デフォルト」は WordPress のデフォルト(タイトル→投稿日) 順、「検索スコア (類似度)」は検索文字列とデータの類似度順となります。
初期値は「検索スコア (類似度)」です。
検索結果の表示「検索スコア」
検索スコアを表示するかどうかを設定します。
検索スコアは抜粋の上部に表示されます。抜粋ではなくコンテンツを表示しているテーマの場合は表示されません。専用のタグ (Full_Text_Search::get_the_score()) をテンプレートに追加するか、functions.php にコードを追加する必要があります。
「検索キーワードをハイライト」
検索キーワードをハイライトするかどうかを設定します。
添付ファイルの検索添付ファイルの検索の有効または無効を設定します。
初期値は「有効」です。
自動テキスト抽出PDF および Word ファイルを追加時に自動でテキストを抽出するかどうかを設定します。

全文検索情報

データベース情報などが表示されます。

全文検索情報画面

表示項目

表示項目説明
データベースインデックスを作成しているデータベース (MySQL または MariaDB) を表示します。
データベースエンジンインデックスを作成しているデータベースエンジン (InnoDB または Mroonga) を表示します。
ngram_token_sizengram_token_size システム変数値を表示します。
※ InnoDB エンジンの場合のみ表示されます。

全文検索メンテナンス

全文検索のインデックスの再同期や再生成を行います。

全文検索メンテナンス画面

添付ファイルの詳細

検索対象のテキストを編集します。

添付ファイルの詳細画面

自動テキスト抽出を有効にしている場合、「検索テキスト」項目に抽出したテキストが格納されます。このテキストを変更した場合、インデックスの再生成で更新されることはありません。再生成する場合は空にしてください。

インストール

  1. WordPress 管理画面->[プラグイン]->[新規追加] メニューより、[プラグインを追加] ページを開きます。
  2. 検索ボックスに、”Full-text Search” と入力し検索します。
  3. Full-text Search が見つかったら、[今すぐインストール] をクリックします。
  4. インストールが完了したら “プラグインを有効化” をクリックします。

データベース設定

InnoDB エンジンの場合、ngram_token_size システム変数のデフォルト値は2で、この場合1文字での検索は効きません。現在値は、設定画面で確認することができます。

動作環境

  • WordPress 4.9以上
  • PHP 7.1以上
  • MySQL 5.6以上または Mroonga エンジン

注意事項

  • Mroonga エンジンを強く推奨します。InnoDB エンジンでは、データ量が多い場合や ngram_token_size が1の場合などにパフォーマンスが大幅に低下することがあります。
  • Mroonga エンジンが利用可能な場合は、InnoDB エンジンよりも Mroonga エンジンを優先して使用します。
  • 投稿データを WordPress 経由ではなくデータベースを直に変更した場合は、再同期 (全文検索ツールより [再同期] ボタンを押下) する必要があります。投稿データの更新日を更新しないように書き換えた場合は、再生成 (全文検索ツールより [再生成] ボタンを押下) する必要があります。
  • 保護された PDF ファイルのテキスト自動抽出には対応していません。
  • Mroonga エンジンを使用している環境から Mroonga エンジンが使用できない環境へサイトを移行する場合、エクスポートする前に一旦プラグインを削除してからエクスポートしてください。移行プラグインによってはインポートに失敗する場合があります。

既知の不具合

PDF ファイルのフォーマット形式によっては、保護されていないファイルを保護されたファイルと誤検知しテキストの自動抽出ができない場合があります。

https://github.com/smalot/pdfparser/issues/488

カスタマイズ

全文検索は標準のワード検索を置き換えます。そのため基本的には標準の WordPress のカスタマイズが有効です。

検索ページの検索を添付ファイルのみに制限

検索ページの検索を添付ファイルのみに制限します。

function search_filter( $query ) {
	if ( ! is_admin() && $query->is_main_query() ) {
		if ( $query->is_search ) {
			$query->set( 'post_type', 'attachment' );
		}
	}
}
add_action( 'pre_get_posts', 'search_filter' );

ファイルブロックの検索

ファイルブロックのファイルを検索対象とします。

add_filter( 'full_text_search_index_post', function( $data, $post_ID ) {
	global $full_text_search;

	if ( $full_text_search ) {
		if ( 'post' === $data['post_type'] ) {

			$text = $data['post_content'];

			$blocks = parse_blocks( get_post_field( 'post_content', $post_ID ) );
			foreach ( $blocks as $block ) {
				if ( 'core/file' === $block['blockName'] ) {
					$id = $block['attrs']['id'];
					$text .= "\n" . get_post_meta( $id, 'full_text_search_search_text', true );
				}
			}

			$data['post_content'] = trim( $text );
		}
	}
	return $data;
}, 10, 2 );

※ インデックスを再生成する必要があります。

検索対象項目は下記の4項目があります。違いは検索スコアの重みで keywords と post_title は若干高く重みづけされています(Mroonga のみ)。

  • keywords
  • post_title
  • post_content
  • post_excerpt

公式ディレクトリ

更新履歴

バージョン説明
1.0.0最初のリリース。
1.1.0WordPress マルチサイトにおける、アンインストールのバグを修正しました。
full_text_search_limit フィルターフックを追加しました。
1.2.0InnoDB の場合に、正しく検索されない不具合を修正しました。
1.3.0全文検索を有効化、無効化するオプションを追加しました。
1.4.0添付ファイルに対応しました。
1.4.1投稿タイプの exclude_from_search パラメーターに従うように変更しました。
1.6.0PDF ファイルの検索に対応しました。
1.6.2UI (用語など) を微調整しました。
1.6.3テキストが正しく翻訳されないバグを修正しました。
1.7.0メディア一覧に PDF のテキストの文字数を表示するようにしました。
PDF ファイルの読み込みに失敗した場合の処理を変更しました。
1.8.0メディアファイルに検索テキスト (PDF テキスト) 項目を追加しました。
全文検索用のカスタムフィールド(full_text_search_search_text)を追加しました。
1.8.2非公開投稿が検索できない場合がある不具合を修正しました。
PDF 自動生成したテキストを検索テキスト項目に表示するように変更しました。
1.9.0添付ファイルで PDF のみを検索するオプションを追加しました。
1.9.1PDF のみの検索が有効にならない不具合を修正しました。
2.0.0Word (doc、docx) ファイルの検索に対応しました。
2.1.0Excel および PowerPoint ファイルの検索 に対応しました。
2.2.0設定ページをリニューアルしました。
2.2.1翻訳テキストの漏れを修正しました。
2.2.3SQL を最適化しました。
2.2.4PDF Parser ライブラリを1.1.0に更新しました。
2.2.5空の検索結果画面の警告を修正しました。
2.2.6PDF Parser ライブラリを2.0.1に更新しました。
2.2.7添付ファイルのみの検索の不具合を修正しました。
2.2.8PDF Parser ライブラリを2.1.0に更新しました。
2.2.9PDF Parser ライブラリを2.2.0に更新しました。
2.2.10PDF Parser ライブラリを2.2.1に更新しました。
2.3.0ソート順オプションを追加しました。
2.4.0検索ページに検索スコアを表示するオプションを追加しました。
2.4.1検索順の不具合を修正しました。
2.5.0検索文字列オプションを追加しました。
2.5.1空の検索でエラーメッセージが表示される場合がある不具合を修正しました。
2.6.0full_text_search_index_post フィルター フックを追加しました。
2.6.1アンインストール時に full_text_search_search_text カスタムフィールドを削除しないで残すように変更しました。
2.7.0パフォーマンスの改善を行いました。
2.7.1データベースのインデックスが再生成されない不具合を修正しました。
2.7.2検索ページ以外の検索ができない不具合を修正しました。
2.8.0パフォーマンスの改善を行いました。
PDF のテキスト自動抽出から、空白や改行などの制御文字を削除するように変更しました。
2.8.1すべての添付ファイルから検索テキストを削除する機能を追加しました。
2.9.0検索結果ページの検索キーワードをハイライトする機能を追加しました。
SQL を最適化しました。
2.9.2全文検索の対象を exclude_from_search の投稿のみに変更しました。
インデックスの再生成時に、添付ファイルのテキストが抽出されない不具合を修正しました。