同じ意味のキーワードを一つにまとめるリダイレクト機能を追加しました。これまで「Google」と「グーグル」のように、一つの同じ意味であるにもかかわらず、複数のキーワードとして登録されてしまう場合がありました。今回追加した、同じ意味のキーワードをまとめるリダイレクト機能を用いることで、一つのキーワードにまとめることができるようになりました。はてなキーワード開発ブログはてなキーワードの「同じ意味のキーワードを一つにまとめるリダイレクト機能」をリリースして2週間がたちました。機能の名前が長くてわかりづらい割に地味なリリースでしたが、中身は大きく変化していますので裏側の仕組みを解説してみようと思います。リダイレクト機能とはそもそも、「リダイレクト機能」ってわかりづらいですね。説明を参照してみましょう。リダイレクト(転送)とは、ある記事へリンクしたときに、別のページに転送する機能のことです。そのようなページをリダイレクトページ(転送ページ)と呼びます。通常、ウィキペディアの記事名は正式名称で作られますが、このリダイレクトページを作っておくと、略称や別名や別の表記で記事を検索しても、実際に存在する記事へ自動的に転送されるようになります。Wikipedia記事によっては特定の記事の略称だったり微妙に違ったりで正確な名称の記事へリンクさせたい。いう場合は以下のようにするとその記事を開いたときに自動で正しい記事へ飛ばすことができます。大百科かいつまんで言うと、同じ意味の言葉を別の文字列で表す場合に、どちらかにまとめてあげると便利だよね!という機能です。リダイレクト元ページにアクセスすると自動的にリダイレクト先のページに移動(転送/リダイレクト)します。「リダイレクト機能」って言うんですね。リリース前に「ゆらぎ機能」とか別の名称も検討したのですが、他サービスで同様の機能が先行してあって、それらが「リダイレクト」という用語を使っているのでむしろ準じた方がわかりやすかろう、という判断ではてなでもこの名前で出しました。どんなキーワードにリダイレクトを設定すればいいのか現在、600件ほどのリダイレクト設定をユーザーさんにしていただいています(キーワード編集にご協力してくださっているユーザーさん、いつもありがとうございます!!)。コロナリダイレクト設定をされたキーワードにアクセスすると、転送先のページにはこのように表示されます。「リダイレクト元を編集」リンクからリダイレクトの解除を行えるので、まずは気軽にリダイレクト設定を試していただければと思います。リダイレクト設定を「した方が良いケース」と「しない方が良いケース」の両方があると思います。事例をためていって、必要であればガイドライン化してみなさんに提示していきたいと考えています。載っけました!というだけのようですが違います!まず、はてなキーワードと他のサービスとの大きな違いは、他のサービスは「百科事典」ですが、はてなキーワードは単なる百科事典ではない、ということです。言葉の意味を説明するという「百科事典」としての側面もありますが、それだけではないということです。はてなキーワードには「含むブログ」という「キーワードを使ってブログをつなげる」「キーワードにまつわる口コミをチェックできる」事ができる、というもう一つの側面があります。リダイレクト機能は、両方の側面に大きく影響する機能なのです。リダイレクト機能これは簡単ですね。同じ意味の言葉の説明は一箇所に書けばよい、同じ意味の別のキーワードは一箇所に転送してあげるのがよい、という発想です。リダイレクト機能はてなキーワードにリダイレクトを設定する意味はもう一つ(以上)あります。リダイレクト設定されたキーワードの「含むブログ」ページには、両方の言葉のどちらかを含むブログが集まるのです!たとえば、現在こんなリダイレクトが設定されています。ページでは、感嘆符が全角なもの、半角なもの、含まないもの、全てをまとめて読むことができるのです。「含むブログ」ページは、そもそも「あるキーワードを含むブログ」を繋げたい・一覧したい、という欲求から作られたページです。「あるキーワード」というのは「ある文字列」ではなく、同じ意味の言葉であれば異なる文字列でも同じように扱って欲しい、というのも人間から見ると当然の希望ですが、機械的にパターンマッチをした結果ではそれが叶いません。今回の機能でそれをある程度解消できたと思っています。リダイレクトの設定を人手で行うという対応が完全とは言えません。それが自動でなされるのが一番幸せだと思いますので、ルール化できる部分は自動でゆらぎを吸収するといった施策を次の一手として考えています。含むブログは、2008年のエンジニアインターンの成果であるはてなダイアリー全文検索機能がバックエンドになっています。これは、はてなキーワードで作成されたインデックスから、ある語を含むブログエントリのドキュメントIDを高速に出力します。この全文検索エンジンの特徴として以下のものがあります。インデックス対象をはてなキーワードに絞る事によりインデックスサイズを小さく収め高速に結果を返す出力が新着順になっているドキュメントIDは新着順になっており、さらにドキュメントIDから日付などのメタ情報を算出できる特定の日付(ドキュメントID)より前、という条件で引ける今回、含むブログをリダイレクトに対応するにあたり、全文検索エンジン自体の刷新も考えましたが、これらの特徴を活かすことでエンジンには手を入れず、クライアント側で工夫することで速度をほぼ落とさず実現することができました。逆算できるページング毎に、以上を繰り返す工程(1)の検索エンジンへのリクエストはがリダイレクトが設定された回数だけ走りますが、ここはボトルネックにはなっておらず、むしろ工程(5)の処理が支配的でした。今回は、工程(5)の速度をこれまでより速くすることに注力し、そこをチューニングすることで表示内容をリッチにしつつユーザー体験は損ねないように工夫しました。速度向上は、ネットワークIO要因の速度低下を減らす(発行するSQLの数をなるべく減らす。適切にキャッシュする)、回数の多い計算(今回の場合、ドキュメントIDのマージ、およびソート)に高速なアルゴリズムを適用する、といった地道な改善を続けました。おかげで、2008年のリニューアルで少し遅くなっていた「含むブログ」を快適な速度にできたのではないかと思います。全文検索を導入する前の「含むブログ」は、一種類のテーブル(時間軸で分割しているので一個の、というわけではありません)に双方向インデックスを張る事で実現していました。インデックスが双方向に張られていたのは次の二種類の目的のためでした。時系列で引くこのテーブルひとつで、はてなダイアリーの主機能がまかなわれていたわけですが、ブログ数の増加に伴いスケールさせる事が困難になりました。そこで2008年のリニューアルで(2)の役割を全文検索エンジンに移行したわけです。全文検索エンジンのお陰でスケールはするようになったのですが、別の問題が生まれます。ブログにキーワードを書いた際に、インデックスを二種類書き込まなければいけなくなりました。これにより「日記に書いたけどすぐに『含むブログ』に載らない」といった事態が発生したのです。日記更新時に全文検索のインデックスを追加しても、アプリケーション層でキャッシュをしていると、キャッシュのパージもしてやらないと「含むブログ」に表示されるまでにタイムラグが生じてしまいます。今回のリダイレクト対応では、アプリケーション層のキャッシュを思い切って少なくし、キャッシュのパージの仕組みをシンプル化し、「含むブログ」に表示されるまでのラグをなるべく短くする事にも注力しました。「キーワードでつながる」キーワードにリダイレクト機能ができましたリダイレクト機能は、意味の同じキーワードをまとめますまとめることで、百科事典的にも「含むブログ」的にも嬉しいです「含むブログ」の表示速度を向上しました日記を書いて「含むブログ」に載るまでのタイムラグも短くしていますはてなダイアリーには「キーワードでつながる面白ブログ」というキャッチコピーがありました。はてなダイアリーの原点はまさにそこだと思っていますので、「キーワードでつながる」体験をより充実させていくように、はてなダイアリー、はてなキーワード両面から進化させていきたいと思います。「新はてなダイアリーの裏側」というトークをしてきました月別アーカイブはてなブログをはじめよう!onishiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。