小説の投稿サイトに検索機能を実装してみる

公開: 2015-03-01 23:59
更新: 2016-04-29 06:02

こんにちは。あっきぃです。

あっきぃは密かに運営しているサイトの1つに「R*STORY」という小説の投稿サイトがあります。



今日から春なので、
検索機能を付けたい気分になりました。



頑張るぞー



1.まずは検索バーを付けます。

トップページの右上らへんに付けたいです。HTMLとCSSを書きます。

小説の投稿サイトに検索機能を実装してみる

むむむ...

えいやっ

小説の投稿サイトに検索機能を実装してみる

付きました。

(ちょっと太いかな)




2.検索ボタンをクリックしたらページを遷移するようにjQueryで書きます。

例えば「りんご」で検索したら

「/search?q=りんご」に遷移するようにしました。

$('div#btnSearch').click(function(){
        var q = $('input#inputSearch').val();
        top.location.href = '/search?q='+q;
});

こんだけ。




3.MySQLで検索します。

WHERE column LIKE '%りんご%'

ってな感じでLIKEで全文を検索します。

SELECT c.id FROM chapter AS c, story AS s WHERE c.sid = s.id
AND (s.title LIKE '%りんご%' OR c.text LIKE '%りんご%');

storyテーブルに小説のタイトルが入っており、

chapterテーブルに1話、2話、3話の本文が入っています。

上記のクエリは「タイトルか本文にりんごが入っている話のIDを返す」という意味。



「LIKEだと遅い!」ってのをチラホラ聞いていたので、どうだろうなーと思いながら実行してみると...

...
| 31097 |
| 31127 |
+-------+
179 rows in set (1.02 sec)

キャッシュなしで1秒前後くらい。うん、遅い。
が、実際検索してみると体感的に違和感がないので良しとしよう。(めんどくさがった分けではない。)


ちなみに小説は4万話弱。



あと、「りんご はちみつ」のように複数ワード指定した場合は

SELECT c.id FROM chapter AS c, story AS s WHERE c.sid = s.id
AND (s.title LIKE '%りんご%' OR c.text LIKE '%りんご%')
AND (s.title LIKE '%はちみつ%' OR c.text LIKE '%はちみつ%');

のようにAND検索するようにしました。



4.あとはHTMLとCSSでがんばって出力するだけです。

レイアウトをそろえたり、

ページングの処理を書いたり、
ページャを書いたり、小躍りしてみたりすればOKです。(ここが一番大変なわけだが。)



よいしょっと

小説の投稿サイトに検索機能を実装してみる

これにて簡易ではありますが検索機能の実装完了です。



⇒ R*STORY - 分岐型リレー小説投稿サイト



この記事をシェア
この記事にコメントする
書き込む
あっきぃ(@appstars_aki)
Web、iOSなフリーランサーです。好きなものはお寿司です。でもお寿司は高いので普段は雑草とか拾ったドングリを食べています。お仕事や意味もなく毎月お小遣いをくれる人を探してます。

お仕事の依頼や自分で作ったアプリのレビューを希望しちゃう方はaki@appstars.jpまでご連絡ください。