関口宏司のLuceneブログ

OSS検索ライブラリのLuceneおよびそのサブプロジェクト(Solr/Tika/Mahoutなど)について
「特徴語検索」(MoreLikeThis)の応用例
以前説明した「特徴語検索」(MoreLikeThis)を使用したEコマースサイトがSolrメーリングリストで紹介されていたので、ここでも紹介しよう:

http://www.vanns.com/

このサイトで商品を選ぶと、「その他のおすすめ商品」が右側に表示される。これはユーザが選択した商品と特徴が似ている他の商品を検索・表示するもので、MoreLikeThisを使用している。次のような感じである:



おすすめ商品一覧 = searcher.search( MoreLikeThis.like( ユーザが選んだ商品 ) );



検索エンジンはこのように、結構いろいろなところ(機能)で使われていたりするので、面白い。
| 関口宏司 | Luceneデモ | 13:17 | comments(0) | trackbacks(0) |
Yahoo!オークションのデモが
うちのデモマシンがなんか重いと思ったら、Erik HatcherさんがSolr MLでFlareのデモを紹介していた:

http://www.nabble.com/Re%3A-Solr-1.3-release-date-p18400443.html
| 関口宏司 | Luceneデモ | 23:07 | comments(0) | trackbacks(0) |
LUCENE-794のデモへの適用
現在開発中のSolr 1.3のLuceneライブラリがアップデートされ、LUCENE-794の修正が取り込まれた:

https://issues.apache.org/jira/browse/LUCENE-794

LUCENE-794はフレーズのハイライトを正確に行うという新機能(フレーズのハイライトが正確に行えなかったこれまでのHighlighterは、それは「不具合」ではなく「仕様」という認識である)の追加である。「新機能」なので従来のQueryScorerを使うと従来のままの動作となる。つまりフレーズを構成する単語が独立していてもハイライトの対象となってしまう。

LUCENE-794で追加されたSpanScorerを使用するとフレーズが対象の場合はフレーズをハイライトし、フレーズを構成している単語が単独のものはハイライト対象からはずれるようになる(ただし、ハイライトの単位は単語単位となる。この意味は下記にあるとおりデモで実際にフレーズを検索してみて、検索結果画面HTMLの「ソースの表示」をしてみるとわかるのでやってみよう)。

このブログを検索するデモに早速この機能を取り込んでみた。

「検索性能」という検索語(フレーズ)で検索すると、これまでは次のように「検索」という独立した単語でもハイライトされてしまっていた:

before LUCENE-794

しかし最新のSolr trunkを適用した現在は、次のように「検索」という独立した単語はハイライトされなくなる:

after LUCENE-794

もっとも、この例ではAnalyzerに形態素解析を使用し、検索フレーズも「お行儀がよい」ためにあまり改善した印象を受けないかもしれない(Googleでも最初の図のようなハイライトが実際に行われるし)。AnalyzerにN-gramを使用したり、フレーズが細かい単語から構成される場合は、この改善のありがたみがよくわかる。
| 関口宏司 | Luceneデモ | 19:07 | comments(0) | trackbacks(0) |
類義語検索のデモ公開
類義語検索のデモを公開した:

http://www.rondhuit-demo.com/syndemo/search/index

「松下電器」で「パナソニック」を含む文書がヒットしたりする。

類義語検索というと、商用検索エンジンでは類義語データを辞書メーカーから買って使ったりしているようだ(そうでないものもあるかもしれない)。

弊社のソリューションは、類義語辞書はお客さんに自分で用意してもらう、というものである。そしてこれで十分間に合っている。というのも、アプリケーションがサービスしているコンテンツやそのサイトの性格によって必要な類義語リストはかなり偏ると考えられるからだ。一般的な類義語定義(たとえば、「首相」と「内閣総理大臣」など)がぜひとも必要だ、というのはあまり聞かない。それよりも、そのアプリケーションで頻繁に検索される言葉の類義語定義の充実がはるかに重要である。そのため、結局のところ一般的な類義語データを持っていたとしても、それ以外にそのサイト固有のことばとその類義語をユーザ辞書として持つことになる。

このユーザ辞書にはイニシャルで数十〜数百も定義すれば類義語が思いつかなくなる。あとは運用を継続していく中で必要に応じて徐々に類義語リストを充実していけばよい。これでたいていは問題ない。

このデモはリンクをクリックするだけで検索ができるようになっているので、一度やってみていただきたい。そのとき、スコアにも注目して欲しい。このデモでは、類義語でヒットさせるだけでなく、オリジナルの検索語を尊重したスコア計算を行っている。たとえば、「松下電器」で検索した場合に「パナソニック」を含む文書も検索できるが、「パナソニック」を含む文書よりも「松下電器」を含む文書のスコアを高くして上位表示する、ということを行っている。
| 関口宏司 | Luceneデモ | 02:49 | comments(5) | trackbacks(0) |
Luceneブログ内検索デモのリニューアル
このブログページの右上にある「検索窓」の検索機能は、以前よりLuceneで作成したものを提供していたが、本日よりSolrに切り替えた。

この(Powered by RONDHUITと記してある)検索窓から検索すると、ブログサービスプロバイダ提供による検索機能ではなく、Solr(昨日まではLucene)を使って検索し、検索結果を表示するようになっている。

ブログサービスプロバイダ提供による検索機能はMovable Typeをはじめとして使いにくいものが多く、LuceneやSolrを使って専用の検索機能を設置することはユーザ(ブログ読者)の利便性を高めるのに役立つ。

ためしにこのページの右下にあるもうひとつの検索窓を使って適当な検索語(たとえば「Lucene」など)を検索してみて欲しい。この検索窓はブログサービスプロバイダ提供による検索機能であるが、そのレスポンスは検索語が含まれる記事がベタに出力されるだけのものであり、使いにくいことが実感できると思う。

デモシステムの概要

今回リニューアルしたブログ内検索デモのシステム構成を下図に示す。

デモシステム構成

「ブログ内検索」といいつつ、今回は私の会社のホームページも検索対象に含めている。つまり、ひとつの検索窓から検索すると検索結果ページには「ブログ記事」と「ロンウイットホームページ」のURLが混在して表示されるのだ。ブログと会社のホームページを「横断検索」できる、と言い換えてもよい。

・・・と書きながら今気がついたが、ブログと会社のホームページが横断検索できるのであれば、「検索窓」がブログの方にだけあるのは片手落ちではないか。会社のホームページの方にも横断検索のための検索窓があってしかるべきではないのか。まったくそのとおりなので、こちらは年明けにでもデザイナーさんにお願いしようと思う。
(なお、全文検索の会社のくせに会社のホームページに「検索窓」が設置していないことについて、前バージョンのデモを紹介しているこちらの記事にその理由が書かれている)

なお、今回のデモシステムではフロントAPサーバにはApache+FastCGI上でRailsのアプリケーション稼動させている。

デモシステムの新機能

今回のデモでは単にLuceneをSolrに置き換えたり、フロントにRailsを使用したりといった構成の変更だけではなく、次のような機能向上を取り入れている。

類義語検索

昨日のことであるが、私は近所のスターバックスに行き「本日のコーヒーのショートサイズ」を注文して店内で飲みながら「スタバではグランデを買え!」(吉本佳生著)を読んだ。

別に意識してそうしたわけではなく、私はスターバックスでは「本日のコーヒーのショートサイズ」を注文することと決まっているのだった。

コーヒー専門店であるスタバにはさまざまなコーヒーの種類やさらにはトッピングなるものが用意され、お客様の好みに合わせたコーヒーのバリエーションでおもてなしをしてくれるようになっている。私にはそれが恐ろしい。スタバには2000年ごろから親しんでいる私であるが、メニューからいろいろ選ぶことができないまま数年が過ぎ、今では「本日のコーヒーのショートサイズ」とレジ前でいうことが習慣として定着している。

突然何の話かと訝ると思うが、類義語の話の前フリである。上の文章では(実話である)「スターバックス」と「スタバ」を同じ意味で使っている。キーワード検索ではこれらを「類義語」として扱うようにできていないと、ユーザは検索窓に「スターバックス OR スタバ」などと入力しないと両方を検索できないため大変不便だ。今回のデモではこの類義語検索ができるようになっており、検索語のハイライトも可能である。

類義語の検索のためには類義語辞書を整備する必要があるが、デモでは現時点で次のような類義語リストを登録している:



ロンウイット, RONDHUIT, 丸八
アマゾン, amazon
アドビ, アドビシステムズ, adobe
イーモバイル, EMOBILE
リクルート, RECRUIT
レッドハット, redhat, red hat
マクドナルド, マック, マクド
スターバックス, スタバ, starbucks

コンサル, コンサルティング
コラボ, コラボレーション
コンファレンス, カンファレンス
ミーティング, 会議
ブログ, ウェブログ, weblog, blog
ウィンドウ, ウインドウ, window
エンタープライズ, enterprise
ミドルウェア, middleware
デモ, demo
ソースコード, プログラム
ページ, 頁

インデクシング, インデキシング, indexing
スループット, QPS
強調表示, ハイライト, highlight, highlighter
トランク, trunk
ドキュメント, 文書
サーチ, 検索
絞込み, 絞込, 絞り込み
エラー, error
なまず, ナマズ, 鯰, namazu
セナ, senna



たとえば、弊社名「ロンウイット」をアルファベットの「RONDHUIT」で検索したりその逆も可能である。「コンサルティング」で「コンサル」が検索できたりするので便利なのがわかるだろう。

絞り込み検索

これまでのデモシステムでも絞り込み検索は可能であるとしていたが、今まではブログのカテゴリや日付の範囲でどちらか一度絞り込み検索を行うと、その先さらに絞込みを行うことができなかった。

新しいデモでは、絞り込み検索のリンクをクリックして絞り込まれた結果を、さらに別のリンクをクリックして次々と絞り込んでいくことが可能となっている。

トップページのナビゲーションリンクの表示

トップページが次のようになった。

デモトップ画面
http://www.rondhuit-demo.com/lbs2demo/


こうやって客観的に見るとつくづく地味な画面だ(これも年明けデザイナーに頼んで何とかしよう)。それはともかく、図にあるようにトップページにはあらかじめ、検索窓に検索語を入力しなくても検索して絞り込んでいけるようにナビゲーションリンクが表示されるようになった。このリンクにはLucene学習者向けに、Luceneの基本クラスなるものを私があらかじめピックアップし、これらのクラスが含まれる記事が簡単に検索できるようにもなっている。なおこれらは検索語ではなくフィルタとして扱われるため、ハイライトの対象とはならないことを注記しておく。

また旧デモでは「最近検索されたことば」なるものがリンクで表示されていたが、検索キーワードのモニタリング機能は現在開発中のため、今回のデモからは一時的にはずしてある。
| 関口宏司 | Luceneデモ | 15:23 | comments(0) | trackbacks(1) |
+ Solrによるブログ内検索
+ PROFILE
    123
45678910
11121314151617
18192021222324
252627282930 
<< November 2018 >>
+ LINKS
検索エンジン製品 - 比較のポイント
商用検索エンジンを購入した企業担当者は読まないでください。ショックを受けますから・・・
>>製品比較 10のポイント
+ Lucene&Solrデモ
+ ThinkIT記事
+ RECOMMEND
Apache Solr入門 ―オープンソース全文検索エンジン
Apache Solr入門 ―オープンソース全文検索エンジン (JUGEMレビュー »)
関口 宏司,三部 靖夫,武田 光平,中野 猛,大谷 純
+ RECOMMEND
Lucene in Action
Lucene in Action (JUGEMレビュー »)
Erik Hatcher,Otis Gospodnetic,Mike McCandless
FastVectorHighlighterについて解説記事を寄稿しました。
+ RECOMMEND
+ SELECTED ENTRIES
+ RECENT COMMENTS
+ RECENT TRACKBACK
+ CATEGORIES
+ ARCHIVES
+ MOBILE
qrcode
+ SPONSORED LINKS