« あけましておめでとうございます | トップページ | 風水プログラミング »

2020.01.02

Trenzサイトの本文を検索できるようにしました

Trenz製品販売日本語サイトの見えないところをリニューアルしました。

見えない部分だけど大事な仕事。

 

まず、今までTrenzサイトでは検索窓にカーソルを合わせることが困難でした。

どうやら2018年にスライダーを起動するJavascriptが追加された際に、スライダーの枠のdivが、実際の画像のサイズよりも大きいheightで定義されていて、その枠の見えない部分にバリアされて検索窓にカーソルが合わせられなかったようです。

そのため、スクロールする一瞬だけ検索ができるということになっていました。

この不具合を1年4か月くらい放置していました。いけないですね。

Search_blocked

 

せっかく検索ができるようになったので、本文を全文検索できるようにしました。

Trenz製品販売日本語サイトをはじめ、特電の作るWebページはtkcmsというCMS(コンテンツマネージメントシステム)で作られていますが、そのデータは以下のような感じでデータベースに入っています。(実際には1つのレコードには30個くらいの項目があるのですが簡単にしています。)

Contents_array

そして、過去のページ内容をいつでも復元できように、すべてのページのすべての時点のデータを全保存しています。

だから、元になるテーブルを全検索しては、すでに無効になっている記事や更新される前のデータもひっかかってしまいます。

 

このようなテーブルに対して全検索を行うには、まず、アクティブな記事のリストを作り(ここでSELECTを1回)、各記事のURLやタイトルをキーとして内容を取り出すためのSELECT文を記事の数だけforeachで回すことになります。

合計、ページ数+1回のSELECT文を回さなければならなくなり、重くなります。

 

そこで考えたのが、検索用のキャッシュテーブルを作ること。

全記事のデータの中から現在アクティブかつ最新のものを取り出し、HTMLのタグを外し、全角英数字を半角英数字に変換したテーブルを作ります。

Search_cache

そして、この検索用キャッシュテーブルに対して検索を行います。

全角半角で揺れても大丈夫になるし、1回のSELECT文で済むし、各ページの検索スコアを設定することもできるようになりました。

例えばZynqberryで検索したときの結果は以下のとおり。

Search_result

商品情報だけではなく、記事全文からテキスト検索できるようになりました。

 

|

« あけましておめでとうございます | トップページ | 風水プログラミング »

コメント

コメントを書く



(ウェブ上には掲載しません)




« あけましておめでとうございます | トップページ | 風水プログラミング »