• Resolved miyagi1977

    (@miyagi1977)


    お世話になっております。
    当プラグインの2.9.0を利用しております。

    あるPDFファイルをWordPressにアップロードしたところ、約620万文字の検索テキストが抽出されたのですが、このファイルの編集画面を開こうとするとブラウザより以下のエラーが返されます。

    Chrome:SBOX_FATAL_MEMORY_EXCEEDED
    Edge:Out of Memory

    Full-Text Searchを無効化してから当該ファイルをアップロードした(検索テキストを抽出しない)場合は、この事象は発生しません。

    そこで質問なのですが、1ファイルに設定可能な検索テキスト文字数に上限値はあるのでしょうか。
    上限値がある場合、それを超えた文字数が自動抽出されるのを防ぐ方法はないでしょうか。
    (できればプラグインの無効化を伴わない方法が望ましいです)

    よろしくお願いいたします。

Viewing 7 replies - 1 through 7 (of 7 total)
  • Thread Starter miyagi1977

    (@miyagi1977)

    お世話になります。

    すみません、質問に記載した特定ファイルの検索テキスト文字数が誤っていました。

    誤:620万文字
    正:260万文字

    よろしくお願いいたします。

    Plugin Author ishitaka

    (@ishitaka)

    こんにちは

    1ファイルに設定可能な検索テキスト文字数に上限値はあるのでしょうか。

    プラグインによる上限値は設けていません。システムの最大値(4G バイト)になると思います。

    上限値がある場合、それを超えた文字数が自動抽出されるのを防ぐ方法はないでしょうか。

    下記コードで、編集画面での文字数を制限(10万文字)することができます。

    テーマの functions.php に、

    if ( $full_text_search ) {
    	remove_filter( 'attachment_fields_to_edit', array( $full_text_search->admin, 'attachment_fields_to_edit' ), 10, 2 );
    
    	add_filter( 'attachment_fields_to_edit', function( $form_fields, $post ) {
    		global $full_text_search;
    
    		if ( $full_text_search ) {
    
    			$search_text = get_post_meta( $post->ID, Full_Text_Search::CUSTOM_FIELD_NAME, true );
    
    			if ( empty( $search_text ) ) {
    				if ( $row = $full_text_search->get_fulltext_row( $post->ID ) ) {
    					if ( 0 == $row->status ) {
    						$search_text = $row->keywords;
    					}
    				}
    			}
    
    			$search_text = mb_substr( $search_text, 0, 100000 );		// 文字数を制限
    
    			$form_fields['search_text'] = array(
    				'label' => __( 'Search text', 'full-text-search' ),
    				'input' => 'textarea',
    				'value' => esc_textarea( $search_text ),
    				'helps' => __( 'This is the target text for full-text search. If you have enabled automatic text extraction, it will be stored here.', 'full-text-search' )
    			);
    		}
    
    		return $form_fields;
    	}, 10, 2 );
    }

    ※ コード中の「100000」が制限する文字数です。

    Thread Starter miyagi1977

    (@miyagi1977)

    お世話になっております。
    さっそくのご回答ありがとうございます。

    結局、Out of Memoryはブラウザの環境次第だと思いますので、ご教示いただいた文字数制限の仕組みを用いて当環境でどの程度の文字数まで許容されるかを検証したいと思います。
    ただし現状、すぐにfunctions.phpを触れる環境にないため、以下2点質問させてください。

    ?mb_substr()に指定する数値は、文字種に関わらない文字数でしょうか。(ASCIIでもUTF-8漢字でも1文字で1カウント?)

    ?今回の例だと、ファイルをアップロードした際の動作としては、ファイルの先頭から10万文字を検索テキストとして抽出するような動きになるのでしょうか。

    よろしくお願いいたします。

    Plugin Author ishitaka

    (@ishitaka)

    ?mb_substr()に指定する数値は、文字種に関わらない文字数でしょうか。(ASCIIでもUTF-8漢字でも1文字で1カウント?)

    文字数となります。

    ?今回の例だと、ファイルをアップロードした際の動作としては、ファイルの先頭から10万文字を検索テキストとして抽出するような動きになるのでしょうか。

    このコードでは、自動抽出されるテキストの文字数は制限していません。編集画面で表示する検索テキストの文字数を制限しています。よって編集画面で検索テキストを更新すると、制限された文字列で保存されてしまいます。ご注意ください。

    Thread Starter miyagi1977

    (@miyagi1977)

    ありがとうございます。

    すみません、追加で質問させてください。
    編集画面で検索テキストに変更をかけなくても、ファイルの更新を行うと制限された文字列で保存されてしまうでしょうか。
    それとも、検索テキストに変更をかけなければ、ファイルの更新を行っても制限前の文字列が保持されるでしょうか。

    よろしくお願いいたします。

    Plugin Author ishitaka

    (@ishitaka)

    メディアの表示タイプで動作が異なります。

    リスト表示の場合:
    更新ボタンを押すと検索テキストも制限された文字数で更新されてしまいます。

    グリッド表示の場合:
    検索テキストを変更しない限り更新されません。

    Thread Starter miyagi1977

    (@miyagi1977)

    ありがとうございます。

    その後検証の結果、検索テキストの文字数と事象の再現性は関連がなさそうであることが判明しました。

    オリジナルファイル(.xlsmファイル)をPDF化したもの
     Excelファイルサイズ ?2,231,963 Byte
     PDFファイルサイズ ?8,656,730 Byte
     テキスト自動抽出 ?成功
     検索文字数 ?2,605,553
     編集画面を開く ?NG
     ※PDF化の工程をやりなおしても再現

    オリジナルファイルを、内容は変更せずに別名保存したものをPDF化したもの
     Excelファイルサイズ ?2,225,136 Byte
     PDFファイルサイズ ?8,674,123 Byte
     テキスト自動抽出 ?エラー(既知事象)
     検索文字数 ?2,806,326
     編集画面を開く ?OK

    テキストの自動抽出に失敗するという既知事象の再現条件は不明です。
    そのため、この既知事象が解消された場合に当事象が再現するかどうかはわからないのですが、オリジナルファイル以外では今のところ再現性がないので、当件はクローズさせていただきたいと思います。
    できればオリジナルファイルを提供させていただければと思ったのですが、機密情報が含まれるファイルなのですみませんが提供は難しいです。

    ありがとうございました。

Viewing 7 replies - 1 through 7 (of 7 total)
  • The topic ‘1ファイルに設定可能な検索テキスト文字数の上限について’ is closed to new replies.