関口宏司のLuceneブログ

OSS検索ライブラリのLuceneおよびそのサブプロジェクト(Solr/Tika/Mahoutなど)について
スポンサーサイト

一定期間更新がないため広告を表示しています

| スポンサードリンク | - | | - | - |
ASCIIFoldingFilterの存在意義
「ASCIIFoldingFilterの存在意義」というと大げさだが、Lucene 2.9からCharFilterが登場したのにTokenFilterレベルで行うASCIIFoldingFilterは必要なの?というメール投稿:

http://old.nabble.com/Why-ASCIIFoldingFilter-is-not-a-CharFilter-td27680105.html

その回答としては、「インデックス前には最終的にターム中のdiacritics(ウムラウトみたいな付加記号)を削除したいけどいくつかのStemmer(英語でいうところの複数形を単数形にしたりingがつく単語を原語に直したり等、機械的に単語を変換する機能)はdiacriticsを参照している」とのこと。なるほど。
| 関口宏司 | Luceneクラス解説 | 12:05 | comments(0) | trackbacks(0) |
書籍「Apache Solr入門」
技術評論社より「Apache Solr入門」を出版した。Amazonではまだ予約受付中というステータスだが、昨日Magic Mouseを買いにヨドバシAkihabaraに行ったついでに7階の有隣堂書店をのぞくとすでに販売されていた。

以下に紹介に代えて「まえがき」の原稿を掲載する。

はじめに

楽しい情報検索の世界へようこそ!

本書はApache Solr(アパッチ ソーラー;以下Solrと記します)を体系的に解説した、初の日本語による入門書です。SolrはApache Lucene(アパッチ ルシーン;以下Luceneと記します)を使って構築されたオープンソースの検索エンジン・サーバです。Luceneはすでに世界中のシステムで使われている実績を持っていますが、Javaで書かれた検索エンジン・ライブラリであり、利用するにはJavaのプログラムをたくさん書かなければいけません。それに対してSolrは、LuceneをラップしてHTTP/XMLというRESTライクな今どきのインタフェースでアクセスできるようになっています。もちろんインタフェースを簡単にしただけでなく、機能や性能を向上させるいろいろな仕掛けもプラスされています。自動車でたとえるなら、Luceneは高信頼&高性能のエンジンであり、Solrはそのエンジンを使って組み立てられカーナビまで備えた完成車といえるでしょう。そのためSolrは、2006年に公開されるやいなや急速に市場に受け入れられ、利用者が急拡大しました。

前著「Apache Lucene入門」(技術評論社)出版から約4年が経ちました。その間、インターネットやイントラネットで生産される情報は増え続け、情報活用のための検索機能は当時よりもいっそう必要とされている実感があります。今やソフトウェア技術者にとって、検索エンジンの知識はミドルウェアやデータベースに次いで必要とされる技術要素になっているといえるかもしれません。

私はこれまでさまざまな情報システムへの検索機能導入に携わる経験をし、今度はそこで出会った仲間と本書を著す機会を得ました。執筆者一同は日常的にSolrに触れ、この素晴らしい検索エンジンをもっと多くの人に知ってもらいたいとうずうずしていましたが、今ようやくそのときが訪れました(なかなか出せなかったのは、Solr 1.4のリリースを待っていたからであります!)。本書によって一人でも多くの方がSolrを理解し活用して、検索機能を付加したりアプリケーションをより魅力的に変身させられたら執筆者一同のこの上ない喜びです。

それではまた、本文でお会いしましょう!

2010年1月
関口宏司



謝辞

まずSolrの産みの親であるYonik Seeleyさんに感謝いたします。Yonikさんはその類い希なるプログラミングの才を存分に発揮して、高性能検索エンジンLuceneを、Web時代にマッチした軽快なインタフェースを通じて誰でも簡単に利用できるように仕立て上げました。そしてCNET社にも感謝いたします。SolrはCNET社で開発されましたが、CNET社がApacheにソースコードを寄贈してコードが公開されたことでユーザが一気に広がり、今日のSolrコミュニティの基礎を築きました。また関口個人としては、担当編集者の池本公平さんとLucene/Solrコミュニティに感謝いたします。特に池本さんは本書が出版できるよう、技術評論社を説得してくれました。どうか彼が今後も会社でつつがなく勤務できるくらいに本書が売れますように!そしてLucene/Solrコミュニティは、私が(株)ロンウイットを創業するきっかけとなり、そこそこの仕事の自由と世界中のエンジニアとコラボレートしながらソフトウェアを構築していくというエキサイティングな日常をプレゼントしてくれました。慢性的な寝不足というおまけを添えて。みんな、ありがとう!



対象読者

本書は、情報検索に興味を持つ、あらゆる人を対象としています。学生から社会人、週末プログラマから職業プログラマ、SE、プログラミングをしない情報システムを使うだけの人、検索エンジンを比較検討しようとしている人・・・制限はありません。それぞれの立場でSolrをお楽しみください。しかしながら本書はSolrの技術解説書でもあり、Solrをインストールしたりサンプルコードを設定したりする場面もあります。そのときは技術的なバックグラウンドのある方は若干有利でしょう。自分の経験に感謝しつつ、コマンドを入力したり、検索して結果を確認したり、より深くお楽しみください。



本書の構成と読み方

本書は全10章から構成されますが、すべてに目を通す必要はありません。第1章の前半では検索エンジンの基本を紹介しています。すでに検索エンジンについての知識があれば、読まなくてもかまいません。次にSolrのインストール方法を説明しています。本書はSolrを使いながら説明しているところが多いので、ここでぜひ手元のPCにSolrを準備しておくことをお勧めします。最後にアーキテクチャを解説していますので、ここもぜひ目を通しておくと良いでしょう。

第2章から第4章はSolrの基本知識である「スキーマ定義」「インデックス作成」および「検索」について体系的に説明しています。ぜひ一通り読んでおくことをお勧めします。

第5章はプログラマのための章です。SolrにHTTPで検索リクエストを送ると、検索結果はXMLで返ってきます。そのため、XMLをHTMLなどに変換するフロントエンドが必要ですが第5章はさまざまなプログラミング言語でフロントエンドをプログラミングする方法を紹介しています。

第6章以降はさらにSolrを活用したい人たち向けのパートです。第6章ではリレーショナルデータベースなどの情報リソースからSolrのインデックスにデータを取り込むための仕組み「データインポートハンドラ」の使い方を紹介しています。第7章ではSolrコアを複数持つための仕組み「マルチコア」の使い方を紹介しています。第8章は巨大なインデックスを分割して検索する仕組みである「分散検索」の設定方法や使い方を紹介しています。第9章はSolrの検索機能を応用してレコメンデーションやスペルチェックなどの楽しい仕掛けをアプリケーションに付加できる「サーチコンポーネント」を多数紹介しています。そして第10章はユーザ企業の立場から経験上得られた貴重な知見やSolrの癖などの情報を紹介しています。



サンプルコードのダウンロードと本書のサポート

本書で紹介しているサンプルプログラムや設定ファイルは、技術評論社のホームページをはじめ、執筆陣が勤務する下記の会社のホームページからダウンロードできます:

株式会社シーマーク http://www.seamark.co.jp/
株式会社ロンウイット http://www.rondhuit.com/

本書の執筆には万全を期しましたが、ソフトウェア同様、残念ながら不具合が紛れ込む可能性があります。万一誤りを発見したり、手順通り試したのに動かない等ありましたら、上記ホームページの問い合わせフォームなどからお気軽にご連絡ください。また、下記ブログのコメント欄でも受け付けます:

関口宏司のLuceneブログ http://lucene.jugem.jp/

いただいた問い合わせには、個別に回答したり、ブログの記事上で回答したり、正誤表を作成したり等、なんらかの対応をしたいと思います。なお対応には時間がかかる場合がありますので、あらかじめご了承ください。
| 関口宏司 | 書籍「Apache Solr入門」 | 10:15 | comments(55) | trackbacks(2) |
1セグメント内のユニークターム数の上限の拡張(2.9.2)
これまで1セグメント内のユニークターム数は約21億個であったが、Lucene 2.9.2から約2740億件に拡張されることになった:

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

インデックスファイルフォーマットにはこのような制限はないが、検索時に部分的にintでシーク位置の計算結果を保持している部分があったためintの上限の約21億が上限となっていたものである。これをlongで受け取るように変更された。longで受け取るようになったのに上限が900京でないのは、tiiのシーク位置を保持しているのはintのままで、そこからtisの位置を求めるのに128を掛けるのだが、その計算結果を受け取る部分がlongに拡張されたということであるため、上限が(intの上限)x128 = 約2740億件、となっている。

これまでこの制限に当たっていたサイトはセグメントをマージしないようにするくらいしか方法がなかったが、これでだいぶ運用が楽になるだろう。
| 関口宏司 | Luceneインデックス | 18:11 | comments(0) | trackbacks(0) |
インデックスディレクトリ中の不要ファイルを削除するメソッドの追加(3.1)
IndexWriterにdeleteUnusedFiles()というメソッドが追加された。

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

インデックスディレクトリ中のセグメントを構成するファイルは(1)IndexWriterがオープンしたとき、(2)新しいセグメントがフラッシュされたとき、(3)マージか完了したとき、に削除されるが、特にWindowsの場合はセグメントファイルをオープンしているIndexReaderがいると削除に失敗する(Linuxの場合は削除が成功し、IndexReaderがファイルをクローズすると物理的に削除される)。その場合、次回上記(1)〜(3)のチャンスが来たときに再度ファイルが消されようとするが、場合によってはそのチャンスがなかなか巡ってこないこともある。

そのようなときにアプリケーションで好きなタイミングで不要ファイルを削除できるようにしようというのが本メソッドである。
| 関口宏司 | Luceneクラス解説 | 22:05 | comments(0) | trackbacks(0) |
(メモ)ElasticSearch
Luceneを使って作られた、JSON over HTTPで登録/検索できる検索エンジン:

ElasticSearch
http://www.elasticsearch.com/products/elasticsearch/

curl -XPUTで登録し、curl -XGETで検索している様子をビデオデモで見られる
| 関口宏司 | Luceneツール | 08:21 | comments(2) | trackbacks(0) |
Lucene 3.1以降ではAnalyzerにLuceneのバージョンを渡す件
Lucene 3.1以降ではほとんどのAnalyzerのコンストラクタがVersion(Enum)を引数に取るので、ユーザは使用するLuceneのバージョンを渡さなければいけない。MLにAnalyzerを作成するときのパターンが載っていたので転記する:

final Analyzer createAnalyzer(String className, Version matchVersion) throws Exception {
  final Class clazz = Class.forName(className).asSubclass(Analyzer.class);
  try {
    // first try to use a ctor with version parameter (needed for many new Analyzers that have no default one anymore
    return clazz.getConstructor(Version.class).newInstance(matchVersion);
  } catch (NoSuchMethodException nsme) {
    // otherwise use default ctor
    return clazz.newInstance();
  }
}


ネタもと:
http://old.nabble.com/Having-a-default-constructor-in-Analyzers-td27490616.html
| 関口宏司 | Luceneクラス解説 | 09:19 | comments(0) | trackbacks(0) |
@lucene.experimental と @lucene.internal Javadocタグ
これまで書き方が統一されていなかったLucene Javadocにおける試験的なAPIと内部使用目的のAPIのWARNINGメッセージが、AntのJavadocタスクの機能(javadocコマンドの-tagオプション)を使って統一された。試験的なAPIとは、publicなクラスやメソッドであっても、「これは試験的なAPIであり、将来互換性を保たない方法で変更される恐れがあります」といった統一されたWARNINGメッセージがJavadocに表示される。またLucene内部使用目的のAPIも類似のメッセージが表示される:

https://issues.apache.org/jira/browse/LUCENE-2209
| 関口宏司 | Luceneクラス解説 | 09:36 | comments(0) | trackbacks(0) |
+ Solrによるブログ内検索
+ PROFILE
 123456
78910111213
14151617181920
21222324252627
28      
<< February 2010 >>
+ 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