質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1367閲覧

Wordpressのサイト内検索で、スペースが入っている場合と入っていない場合の検索結果を同じにしたい

koba_yasshi

総合スコア1

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2020/08/07 15:55

現在、Wordpressでメディアを立ち上げています。

クライアントからサイト内検索において、「スペースが入っている場合と入っていない場合の検索結果を同じにしたい」との要望があり、その実装方法がわからないので質問させていただきます。

「スペースが入っている場合と入っていない場合の検索結果を同じにしたい」とは?
→例えば、「東京 カフェ」と「東京カフェ」の検索結果を同じにしたいということ

どのように実装すれば良いかの検討がつかないので、どなたかご回答いただけると幸いです。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2020/08/07 23:31 編集

具体的にどのような検索が得られたら良いのでしょうか? また、現在、検索結果が異なると思いますが、どちらの結果に合わせるのでしょうか?
koba_yasshi

2020/08/08 06:08

ご返信ありがとうございます。 具体的にどのような検索が得られたら良いのか? →具体的には、検索窓に入力されたキーワードが記事本文、タイトル、カテゴリー、タグのいずれかに入っている記事を検索結果として得られたら良いです。 参考サイトを下に掲載しました。こちらのサイトと同じような検索機能にしたいとの認識です。 https://mery.jp/ こちらのサイトのように、スペースがある場合とない場合で同様の検索結果を望んでいます。 どちらの結果に合わせるか? →質問文の例を挙げて説明致しますと、「東京 カフェ」のように、スペースありの検索結果に合わせたいです。
dameo

2020/08/08 07:19

当該サイトがWPなのか、それをどう実現しているのか、は知りませんが、、、 WPの検索機能をベースに実装するアイデアレベルの話で良ければ、形態素解析して、形態素ごとにスペースで区切って正規化すれば実現できると思います。正しく解析できないとかえってメチャクチャな結果になりますが、それでも良ければ。以下は解析器のデモサイトへのリンクなどです。 https://tulip.kuee.kyoto-u.ac.jp/demo/jumanpp_lattice?text=%E6%9D%B1%E4%BA%AC%E3%82%AB%E3%83%95%E3%82%A7 http://www4414uj.sakura.ne.jp/Yasanichi1/unicheck/
CHERRY

2020/08/08 08:34

同じアイデアしか思いつかないですよねぇ... 過去に MeCab を WordPress に組み込んだことがあるので、最低限の部分だけを回答してみました。
guest

回答1

0

ベストアンサー

→質問文の例を挙げて説明致しますと、「東京 カフェ」のように、スペースありの検索結果に合わせたいです。

連続している文字列を意味に合わせてスペースで区切って、検索したいということですね。


残念ながら文章を「分かち書き」する機能は、WordPress にはありません。

そのため、外部の構文解析API ( Rosette Base Linguistics / 日本語形態素解析 - Yahoo!デベロッパーネットワーク / 形態素解析API - gooラボ 等)を利用するか 形態素解析エンジン( MeCab / ChaSen / JUMAN 等)をサーバーに導入する必要があります。

一応、WordPress 内で動作実績のある php-mecabNEologd 辞書 を使って、「分かち書き」対応して検索するとすればこんな感じでしょうか。
( WordPress のサーバーに MeCab / php-MeCab / NEologd 辞書のインストールが必要です。 )

function wakachi_search_tt283326($query) { if( $query->is_search && $query->is_main_query() ) { $searchstr = ($query->query)['s']; // Mecab 処理 $options = array( '-Owakati', '-d', '/usr/lib64/mecab/dic/mecab-ipadic-neologd' ); $mecab = new MeCab_Tagger($options); $nodes = $mecab->parseToNode($searchstr); $query->set( 's' , $nodes ); } } add_filter('pre_get_posts','wakachi_search_tt283326', 10, 2);

通常の WordPress 検索では、東京 カフェ で、検索すると「東京」「カフェ」で検索していると思います。

上記では、東京カフェ と続けて入力されている場合も MeCab で分かち書きにして、検索文字列を 東京 カフェ に置き換えています。
そのため、検索文字列を東京 カフェ で与えた場合と同じように「東京」「カフェ」に区切って検索可能と思います。

このようなイメージで良いでしょうか。

投稿2020/08/08 08:30

編集2020/08/08 08:43
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2020/08/08 08:36

もし、 php に php-mecab を導入できない場合は、shell_exec あたりで、mecab コマンドを呼び出して結果を取得するよう書くことも可能と思います。 php-mecab をインストールしない場合でも MeCab と 辞書の導入は必要です。
koba_yasshi

2020/08/08 13:20

ありがとうございます。 MeCabとigoを利用し、形態素解析をする形で解決致しました。 感謝申し上げます。
koba_yasshi

2020/08/08 14:38 編集

重ねて質問をさせてください。 検索結果を表示するページにて、 「東京カフェ」の記事一覧 のように、検索キーワードを取得して表示させたいです。 現状 当然ですが、形態素解析をし、スペースで区切った後のキーワードが表示されてしまいます。 例)「東京カフェ」と調べたのに、「東京 カフェ」の記事一覧 と表示されている。 <現在のコード> <h2>「<?php echo get_search_query(); ?>」の記事一覧</h2> こちらを、スペースで形態素を区切る前のキーワードを表示させる方法をご教授いただけますでしょうか。 重ねての質問になりますがご回答いただけると幸いです。
CHERRY

2020/08/09 11:05 編集

出先なので、試していないのですが、元の文字列は、$_GET['s'] で取れないでしょうか? 値が取れた場合も $_GET['s'] をそのまま使うよりは、 filter_input() で取得してから使用するのが安全と思いますが...
koba_yasshi

2020/08/10 12:27

filter_input()で$_GET['s']を取得したら表示できました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問