以前説明した「特徴語検索」(MoreLikeThis)を使用したEコマースサイトがSolrメーリングリストで紹介されていたので、ここでも紹介しよう:http://www.vanns.com/このサイトで商品を選ぶと、「その他のおすすめ商品」が右側に表示される。これはユーザが選択した商品と特徴が似ている他の商品を検索・表示するもので、MoreLikeThisを使用している。);検索エンジンはこのように、結構いろいろなところ(機能)で使われていたりするので、面白い。1.3のLuceneライブラリがアップデートされ、LUCENE-794の修正が取り込まれた:https://issues.apache.org/jira/browse/LUCENE-794LUCENE-794はフレーズのハイライトを正確に行うという新機能(フレーズのハイライトが正確に行えなかったこれまでのHighlighterは、それは「不具合」ではなく「仕様」という認識である)の追加である。「新機能」なので従来のQueryScorerを使うと従来のままの動作となる。フレーズを構成する単語が独立していてもハイライトの対象となってしまう。LUCENE-794で追加されたSpanScorerを使用するとフレーズが対象の場合はフレーズをハイライトし、フレーズを構成している単語が単独のものはハイライト対象からはずれるようになる(ただし、ハイライトの単位は単語単位となる。この意味は下記にあるとおりデモで実際にフレーズを検索してみて、検索結果画面HTMLの「ソースの表示」をしてみるとわかるのでやってみよう)。このブログを検索するデモに早速この機能を取り込んでみた。trunkを適用した現在は、次のように「検索」という独立した単語はハイライトされなくなる:もっとも、この例ではAnalyzerに形態素解析を使用し、検索フレーズも「お行儀がよい」ためにあまり改善した印象を受けないかもしれない(Googleでも最初の図のようなハイライトが実際に行われるし)。AnalyzerにN-gramを使用したり、フレーズが細かい単語から構成される場合は、この改善のありがたみがよくわかる。類義語検索のデモを公開した:http://www.rondhuit-demo.com/syndemo/search/index「松下電器」で「パナソニック」を含む文書がヒットしたりする。類義語検索というと、商用検索エンジンでは類義語データを辞書メーカーから買って使ったりしているようだ(そうでないものもあるかもしれない)。弊社のソリューションは、類義語辞書はお客さんに自分で用意してもらう、というものである。これで十分間に合っている。いうのも、アプリケーションがサービスしているコンテンツやそのサイトの性格によって必要な類義語リストはかなり偏ると考えられるからだ。一般的な類義語定義(たとえば、「首相」と「内閣総理大臣」など)がぜひとも必要だ、というのはあまり聞かない。それよりも、そのアプリケーションで頻繁に検索される言葉の類義語定義の充実がはるかに重要である。そのため、結局のところ一般的な類義語データを持っていたとしても、それ以外にそのサイト固有のことばとその類義語をユーザ辞書として持つことになる。このユーザ辞書にはイニシャルで数十〜数百も定義すれば類義語が思いつかなくなる。あとは運用を継続していく中で必要に応じて徐々に類義語リストを充実していけばよい。これでたいていは問題ない。このデモはリンクをクリックするだけで検索ができるようになっているので、一度やってみていただきたい。そのとき、スコアにも注目して欲しい。このデモでは、類義語でヒットさせるだけでなく、オリジナルの検索語を尊重したスコア計算を行っている。「松下電器」で検索した場合に「パナソニック」を含む文書も検索できるが、「パナソニック」を含む文書よりも「松下電器」を含む文書のスコアを高くして上位表示する、ということを行っている。SundayLuceneブログ内検索デモのリニューアルこのブログページの右上にある「検索窓」の検索機能は、以前よりLuceneで作成したものを提供していたが、本日よりSolrに切り替えた。RONDHUITと記してある)検索窓から検索すると、ブログサービスプロバイダ提供による検索機能ではなく、Solr(昨日まではLucene)を使って検索し、検索結果を表示するようになっている。Typeをはじめとして使いにくいものが多く、LuceneやSolrを使って専用の検索機能を設置することはユーザ(ブログ読者)の利便性を高めるのに役立つ。ためしにこのページの右下にあるもうひとつの検索窓を使って適当な検索語(たとえば「Lucene」など)を検索してみて欲しい。この検索窓はブログサービスプロバイダ提供による検索機能であるが、そのレスポンスは検索語が含まれる記事がベタに出力されるだけのものであり、使いにくいことが実感できると思う。今回リニューアルしたブログ内検索デモのシステム構成を下図に示す。「ブログ内検索」といいつつ、今回は私の会社のホームページも検索対象に含めている。ひとつの検索窓から検索すると検索結果ページには「ブログ記事」と「ロンウイットホームページ」のURLが混在して表示されるのだ。ブログと会社のホームページを「横断検索」できる、と言い換えてもよい。・・・と書きながら今気がついたが、ブログと会社のホームページが横断検索できるのであれば、「検索窓」がブログの方にだけあるのは片手落ちではないか。会社のホームページの方にも横断検索のための検索窓があってしかるべきではないのか。そのとおりなので、こちらは年明けにでもデザイナーさんにお願いしようと思う。(なお、全文検索の会社のくせに会社のホームページに「検索窓」が設置していないことについて、前バージョンのデモを紹介しているこちらの記事にその理由が書かれている)なお、今回のデモシステムではフロントAPサーバにはApache+FastCGI上でRailsのアプリケーション稼動させている。ことであるが、私は近所のスターバックスに行き「本日のコーヒーのショートサイズ」を注文して店内で飲みながら「スタバではグランデを買え!」(吉本佳生著)を読んだ。別に意識してそうしたわけではなく、私はスターバックスでは「本日のコーヒーのショートサイズ」を注文することと決まっているのだった。コーヒー専門店であるスタバにはさまざまなコーヒーの種類やさらにはトッピングなるものが用意され、お客様の好みに合わせたコーヒーのバリエーションでおもてなしをしてくれるようになっている。私にはそれが恐ろしい。スタバには2000年ごろから親しんでいる私であるが、メニューからいろいろ選ぶことができないまま数年が過ぎ、今では「本日のコーヒーのショートサイズ」とレジ前でいうことが習慣として定着している。何の話かと訝ると思うが、類義語の話の前フリである。上の文章では(実話である)「スターバックス」と「スタバ」を同じ意味で使っている。スタバ」などと入力しないと両方を検索できないため大変不便だ。今回のデモではこの類義語検索ができるようになっており、検索語のハイライトも可能である。sennaたとえば、弊社名「ロンウイット」をアルファベットの「RONDHUIT」で検索したりその逆も可能である。「コンサルティング」で「コンサル」が検索できたりするので便利なのがわかるだろう。絞り込み検索これまでのデモシステムでも絞り込み検索は可能であるとしていたが、今まではブログのカテゴリや日付の範囲でどちらか一度絞り込み検索を行うと、その先さらに絞込みを行うことができなかった。新しいデモでは、絞り込み検索のリンクをクリックして絞り込まれた結果を、さらに別のリンクをクリックして次々と絞り込んでいくことが可能となっている。トップページのナビゲーションリンクの表示トップページが次のようになった。http://www.rondhuit-demo.com/lbs2demo/こうやって客観的に見るとつくづく地味な画面だ(これも年明けデザイナーに頼んで何とかしよう)。それはともかく、図にあるようにトップページにはあらかじめ、検索窓に検索語を入力しなくても検索して絞り込んでいけるようにナビゲーションリンクが表示されるようになった。このリンクにはLucene学習者向けに、Luceneの基本クラスなるものを私があらかじめピックアップし、これらのクラスが含まれる記事が簡単に検索できるようにもなっている。これらは検索語ではなくフィルタとして扱われるため、ハイライトの対象とはならないことを注記しておく。旧デモでは「最近検索されたことば」なるものがリンクで表示されていたが、検索キーワードのモニタリング機能は現在開発中のため、今回のデモからは一時的にはずしてある。比較のポイント商用検索エンジンを購入した企業担当者は読まないでください。McCandlessFastVectorHighlighterについて解説記事を寄稿しました。