関口宏司のLuceneブログ

OSS検索ライブラリのLuceneおよびそのサブプロジェクト(Solr/Tika/Mahoutなど)について
<< 1セグメント内のユニークターム数の上限の拡張(2.9.2) | main | ASCIIFoldingFilterの存在意義 >>
書籍「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) |
こちらでは、はじめまして。
(その節はお世話になりました。)

関口さんの Solr 本、首を長くして待っていました。

19日の昼に Amazon で注文したのですが、在庫がないようで、こちらに届くのは月末になるようです。
| 酒井 | 2010/02/23 12:21 AM |
酒井さん、こんばんは。・・・すみません、恐縮です。。。
| 関口 | 2010/02/23 12:43 AM |
はじめまして。

Apache Solr 入門を読ませて頂きました。

Solrは日本の資料がとても少なく、いろいろと

参考になります。

| yuichirw | 2010/03/22 1:21 AM |
はじめまして。
本日「Apache Solr入門」を購入し、勉強させていただいております。
早速、所有しているiMacに環境構築しておりますが、形態素解析SENの構築がうまくできません。

下記エラーとなってしまいます。(辞書のDownloadに失敗していいます。)

download:
[get] Getting: http://chasen.aist-nara.ac.jp/stable/ipadic/ipadic-2.6.0.tar.gz
[get] To: /Users/celica/Tools/sen-1.2.2.1/dic/ipadic-2.6.0.tar.gz
[get] Error getting http://chasen.aist-nara.ac.jp/stable/ipadic/ipadic-2.6.0.tar.gz to /Users/celica/Tools/sen-1.2.2.1/dic/ipadic-2.6.0.tar.gz

BUILD FAILED

プロキシ等は設定しておりません。(デフォルトのまま)
念のため、perlのパスオプションも試しました。
Safariで直接「http://chasen.aist-nara.ac.jp」へアクセスしてもtime outになります。
*もしかして、サーバが一時的にダウンしているだけかもしれませんが。
 時間を置いて何回かトライしてみますが。

ご多忙中とは存じますが、ヒントなどいただけると助かります。
ご教授よろしくお願いします。
| 島尻 | 2010/03/22 11:09 PM |
私も今ためしにやってみましたが、エラーになりました(MacBook):

BUILD FAILED
java.net.ConnectException: Operation timed out

> *もしかして、サーバが一時的にダウンしているだけかもしれませんが。

その可能性が高いのではないでしょうか。。。
| 関口 | 2010/03/23 12:12 AM |
おはようございます。

早速のご確認ありがとうございました。

今朝、試したらうまくいきました。
やはり、サーバがダウンしていたと思われます。

ご協力、ありがとうございました。

| 島尻 | 2010/03/23 7:00 AM |
5章のJavaアプリをデプロイして、URLをたたくと
http://localhost:8983/solrj-sample/index.html

java.lang.NullPointerException
at org.apache.jsp.WEB_002dINF.jsp.search_jsp._jspService(org.apache.jsp.WEB_002dINF.jsp.search_jsp:231)

が表示されます。

http://localhost:8983/solrj-sample/
にはアクセス可能です。何かお分かりでしたらご教授ください。

| 村田 | 2010/11/30 11:24 AM |
なお利用しているJavaのバージョンは以下の通りです

java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8.2) (6b18-1.8.2-4ubuntu1~8.04.1)
OpenJDK Client VM (build 16.0-b13, mixed mode, sharing)
WindowsXP上で、VMwareを起動し、そのうえでubuntuを利用しております。
| 村田 | 2010/11/30 3:09 PM |
_document.jspの
<%=highlighting.get("title").get(0) %>
をコメントアウトすると
とりあえず例外は回避されました。

と、ここで、インデクシングプログラムを動かしていないことに気がつきました。しかし、インデクシングプログラムを起動しても同じでした。もう少し自分で調べてみます。
| 村田 | 2010/12/01 5:38 PM |
著者の大谷です。
手元の環境ですが、Solr1.4.1でWindows上でサンプルを動作させた場合は特に問題なく動いています。
Solrのバージョンを教えていただけますでしょうか?

| 大谷 | 2010/12/01 11:42 PM |
ありがとうございます。
当初Solr1.4.1で動かしました。エラーになるので
書籍に示されたSolr1.4.0で動かしました。
どちらも同様のエラーになります。

| 村田 | 2010/12/02 7:02 PM |
<%=highlighting.get("title").get(0) %>

<%=document.getFirstValue("title") %>
とすると
ハイライトされませんが、タイトルは出ます。
| 村田 | 2010/12/02 7:41 PM |
現象から見ると、ハイライトがうまく動作していないのだと思います。Solrには特にエラーなどは出ていないでしょうか?
あと、Solrのログに検索のクエリが出ているはずですので、同じクエリをSolrの管理画面(http://localhost:8983/solr/select?...)にて実行すると結果にhighlightingというタグが出るかどうかを確認していただいてもいいでしょうか。

| 大谷 | 2010/12/03 12:50 AM |
すみません、1点抜けていました。出力されているクエリの中にwt=javabinとあるのですが、この部分だけ除去してください。このパラメータを除去するとSolrの管理画面で検索したようにXMLで結果が出力されます。
| 大谷 | 2010/12/03 4:17 PM |
example¥logsの
リクエストログにはエラーはありません。

http://localhost:8983/solr/select?...)にて実行すると
パラメタに、fq=・・をつけないと、同じエラーになります。HTTP ERROR: 500 null  Java.lang.NullPointerException


fq=・・をつけると、XMLファイルが表示され、highlightingというタグ<lst name="highlighting">はひとつだけでてきます。
| 村田 | 2010/12/03 6:37 PM |
返信が遅くなってすみません。
「fq=・・」をつけるとエラーではなく、つけないとエラーでしょうか?
Javaアプリ、SolrともSolrに内包されているJettyで実行されていますでしょうか?
| 大谷 | 2010/12/06 11:17 AM |
「fq=・・」つけないとエラーです
Javaアプリ、SolrともSolrに内包されているJettyで実行しています。

| 村田 | 2010/12/06 12:11 PM |
お手間を取らせてすみません。
エラーになっているクエリをコメントに貼り付けていただいてもいいでしょうか?
ちなみに、サンプルですが、http://localhost:8983/solrj-sample/index.htmlをたたいた(パラメータ指定なし)場合、fqというパラメータは付かないつくりになっているのですが。。。
| 大谷 | 2010/12/07 1:51 AM |
fqというパラメータは付かないのですが、そのままだと

http://localhost:8983/solr/select?rows=10&fl=url%2Ctitle%2Cprice%2Cauthor%2Cpages%2Cisbn&hl=true&hl.fl=title&hl.fl=summary&hl.fl=intended_reader&hl.fl=from_author&hl.fl=toc&hl.snippets=1&hl.simple.pre=%3Cb+style%3D%22background%3Aaquamarine%22%3E&hl.simple.post=%3C%2Fb%3E&hl.usePhraseHighlighter=true&f.title.hl.alternateField=title&f.summary.hl.alternateField=summary&f.summary.hl.maxAlternateFieldLength=100&facet=true&facet.limit=20&facet.mincount=1&facet.sort=count&facet.field=genre&facet.field=keyword&facet.field=author_facet&facet.query=pub_date%3A%5B20090101+TO+*%5D&facet.query=pub_date%3A%5B20080101+TO+20081231%5D&facet.query=pub_date%3A%5B20070101+TO+20071231%5D&facet.query=pub_date%3A%5B20060101+TO+20061231%5D&facet.query=pub_date%3A%5B20050101+TO+20051231%5D&facet.query=pub_date%3A%5B*+TO+20041231%5D&q=*%3A*&start=0

以下のエラーが表示されます
HTTP ERROR: 500
null
java.lang.NullPointerException

そこで、パラメータの最後に下記のようにfq=genre:OSをつけると

http://localhost:8983/solr/select?rows=10&fl=url%2Ctitle%2Cprice%2Cauthor%2Cpages%2Cisbn&hl=true&hl.fl=title&hl.fl=summary&hl.fl=intended_reader&hl.fl=from_author&hl.fl=toc&hl.snippets=1&hl.simple.pre=%3Cb+style%3D%22background%3Aaquamarine%22%3E&hl.simple.post=%3C%2Fb%3E&hl.usePhraseHighlighter=true&f.title.hl.alternateField=title&f.summary.hl.alternateField=summary&f.summary.hl.maxAlternateFieldLength=100&facet=true&facet.limit=20&facet.mincount=1&facet.sort=count&facet.field=genre&facet.field=keyword&facet.field=author_facet&facet.query=pub_date%3A%5B20090101+TO+*%5D&facet.query=pub_date%3A%5B20080101+TO+20081231%5D&facet.query=pub_date%3A%5B20070101+TO+20071231%5D&facet.query=pub_date%3A%5B20060101+TO+20061231%5D&facet.query=pub_date%3A%5B20050101+TO+20051231%5D&facet.query=pub_date%3A%5B*+TO+20041231%5D&q=*%3A*&start=0&fq=genre:OS

結果として、XMLデータが表示されます

| 村田 | 2010/12/07 2:11 PM |
なるほど、ようやく状況が飲み込めました。
アプリが組み立てたクエリでSolrがエラーになっているという状況ですね。

NullPointerExceptionのスタックトレースを5行から10行くらい貼り付けていただいてもいいでしょうか。

| 大谷 | 2010/12/08 4:49 PM |
遅くなりましたが
エラーになるときのスタックトレースです

RequestURI=/solrj-sample/index.html
Caused by:

java.lang.NullPointerException
at org.apache.jsp.WEB_002dINF.jsp.search_jsp._jspService(org.apache.jsp.WEB_002dINF.jsp.search_jsp:231)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:464)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:358)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:367)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:268)
at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126)
at solrbook.client.servlet.SearchServlet.doService(Unknown Source)
at solrbook.client.servlet.SearchServlet.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:367)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
| 村田 | 2010/12/17 12:55 PM |
すみません、solr側でのエラーのスタックトレースをお願いできますでしょうか。
| 大谷 | 2010/12/17 11:07 PM |
ここらへんでいいですか?まだ違います?

警告: Error reading a field from document : SolrDocument[{}]
java.lang.NullPointerException
at org.apache.solr.util.NumberUtils.SortableStr2int(NumberUtils.java:127)
at org.apache.solr.schema.SortableIntField.toObject(SortableIntField.java:65)
at org.apache.solr.schema.SortableIntField.toObject(SortableIntField.java:36)
at org.apache.solr.request.BinaryResponseWriter$Resolver.getDoc(BinaryResponseWriter.java:148)
at org.apache.solr.request.BinaryResponseWriter$Resolver.writeDocList(BinaryResponseWriter.java:124)
at org.apache.solr.request.BinaryResponseWriter$Resolver.resolve(BinaryResponseWriter.java:88)
at org.apache.solr.common.util.JavaBinCodec.writeVal(JavaBinCodec.java:143)
at org.apache.solr.common.util.JavaBinCodec.writeNamedList(JavaBinCodec.java:133)
at org.apache.solr.common.util.JavaBinCodec.writeKnownType(JavaBinCodec.java:221)
at org.apache.solr.common.util.JavaBinCodec.writeVal(JavaBinCodec.java:138)
at org.apache.solr.common.util.JavaBinCodec.marshal(JavaBinCodec.java:87)
at org.apache.solr.request.BinaryResponseWriter.write(BinaryResponseWriter.java:48)
| 村田 | 2010/12/20 1:10 PM |
お手数おかけしてすみません。これでOKです。
なにか独自で入れられたデータとかありますでしょうか?
数値のフィールドでエラーが出ているようです。
schema.xmlの変更や独自にいれたデータに問題があるように思います。

時間が取れていないので、Ubuntuにて動作の確認が出来ていないのですが、Windows上でSolrを起動して同じデータを入れてみても同じ状況になるでしょうか?
| 大谷 | 2010/12/21 10:47 AM |
schema.xmlに手作業での追加はありません
データの追加もありません。

Windowsでも同様でしたので、Ubuntuで動作させました。

もう一度、まっさらにしてやり直せばよいということでしょうか。
| 村田 | 2010/12/22 11:15 AM |
Windowsでも同様ですか。。。
$SOLR_HOME/example/solr/data
ディレクトリを削除してデータを再度登録してもらうのが最後の手でしょうか。

手元ではApacheから取得したSolr1.4.1とロンウイットから取得したsolrbook.zipのデータを使って村田さんに示してもらったURLにアクセスしてもエラーが出ないのですよ。。。

ちなみに、データの登録には$SOLR_HOME/example/exampledocs/post.jarを利用して登録しています。
| 大谷 | 2010/12/22 4:16 PM |
Apache Solr入門を購入させていただきました。とてもわかりやすく書かれていて重宝しています。

書かれている手順でいろいろと触っているところなのですが、
書籍内の後半で書かれているレプリケーションのところで
動作がエラーとなってしまい壁にぶつかってしまいました。

環境としては、以下です。
 CentOS5.5 x86_64
 JDK 1.6.0_23-b05
 Solr 1.4.1

状況は、Solrを導入しデフォルトのschema.xmlとsolrconfig.xmlを用いて、
solrconfig.xmlには書籍に書かれているレプリケーション設定を入れています。
その状態でSolrをJetty経由で起動するとスレーブ側で以下のエラーが出続けます。

致命的: Master at: http://***.***.***.***:8983/solr/admin/replication is not available. Index fetch failed. Exception: Request failed for the url org.apache.commons.httpclient.methods.PostMethod@6defe475

マスタ側では特にエラーは出ていません。
また、マスタ側でiptablesやhosts.allow/hosts.denyは利用していません。

原因がどこにあるかお分かりでしたらご教示いただけますでしょうか。

宜しくお願い致します。
| 高橋 | 2011/01/18 3:53 PM |
> 致命的: Master at: http://***.***.***.***:8983/solr/admin/replication

のURLが違うのではないでしょうか?(/adminが余計?)
| 関口 | 2011/01/18 4:02 PM |
関口様

早速のご返信有り難う御座います。

ずばり、、、その通りでした。
お恥ずかしい限りです。。
どうも有り難う御座いました!

レプリ関係でまた質問になりますが、MySQLのようにマルチマスタ構成を取ることは可能でしょうか?
今下記のようにsolrconfig.xmlに対して追記しています。

□solr01
===
<requestHandler name="/replication_master" class="solr.ReplicationHandler">
<lst name="master">
<str name="replicateAfter">optimize</str>
<str name="replicateAfter">startup</str>
<str name="replicateAfter">commit</str>
<str name="confFiles">schema.xml</str>
</lst>
</requestHandler>

<requestHandler name="/replication_slave" class="solr.ReplicationHandler">
<lst name="slave">
<str name="masterUrl">http://solr02:8983/solr/replication_master</str>
<str name="pollInterval">00:00:10</str>
<str name="httpConnTimeout">5000</str>
<str name="httpReadTimeout">10000</str>
</lst>
</requestHandler>

□solr02
===
<requestHandler name="/replication_master" class="solr.ReplicationHandler">
<lst name="master">
<str name="replicateAfter">optimize</str>
<str name="replicateAfter">startup</str>
<str name="replicateAfter">commit</str>
<str name="confFiles">schema.xml</str>
</lst>
</requestHandler>

<requestHandler name="/replication_slave" class="solr.ReplicationHandler">
<lst name="slave">
<str name="masterUrl">http://solr01:8983/solr/replication_master</str>
<str name="pollInterval">00:00:10</str>
<str name="httpConnTimeout">5000</str>
<str name="httpReadTimeout">10000</str>
</lst>
</requestHandler>

この場合、solr01に対してインデックス更新を行った場合は、solr02へ
反映されますが、solr02に対してインデックス更新を行った場合は、
solr01へ反映されません。

そもそもSolrではマルチマスタ構成はできないのでしょうか。

度々申し訳ありませんが、宜しくお願い致します。
| 高橋 | 2011/01/18 4:53 PM |
すみません。補足です。
上記の場合、solr02に対して更新を行った場合、solr01とsolr02上(自分自身)でも反映されていませんでした。
設定の仕方が間違っているのでしょうか。
| 高橋 | 2011/01/18 5:00 PM |
はじめまして。
solr本を用いてsolr3.1を動かそうとしているのですが、
senの導入のところでつまづいています。

手順書通り設定しているつもりですが、
java.lang.NoClassDefFoundError: org/apache/solr/analysis/BaseTokenizerFactory
のようにsolrの基本的なクラスですら認識しない状況にあります。ここにjarファイルをlibに入れていくことで、エラーの状態が少しづつ進んでいるようなのですが、きりがありません。
基本的なところで誤っている気がするのですが、同様の事象は過去にありませんでしょうか。

ちなみに環境は、CentOS 5.5 jdk6_23 です。本P20の最後の実行 java -Dsen.home= … で失敗します。

アドバイスをよろしくお願いします。
| nozawa | 2011/04/08 6:02 PM |
たびたび申し訳ありません。
先ほどの件は、libの場所が誤っている初歩的な間違いでした。(example直下のlibに配置していました)
修正しましたが、今度は別のエラーで止まってしまいました。
solr1.4.1で試しましたが、そちらは正常に動作します。
solr3.1に変更するとエラーになる様です。

お手数おかけしますが、ご確認いただけないでしょうか。
よろしくお願いします。


Problem accessing /solr/admin/analysis.jsp. Reason:

java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z

javax.servlet.ServletException: java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z
at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:939)
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:871)
at org.apache.jsp.admin.analysis_jsp._jspService(org.apache.jsp.admin.analysis_jsp:719)

(省略)

Caused by: java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken()Z
at org.apache.jsp.admin.analysis_jsp.getTokens(org.apache.jsp.admin.analysis_jsp:131)
at org.apache.jsp.admin.analysis_jsp.doAnalyzer(org.apache.jsp.admin.analysis_jsp:82)
at org.apache.jsp.admin.analysis_jsp._jspService(org.apache.jsp.admin.analysis_jsp:697)
| nozawa & sugiyama | 2011/04/08 6:36 PM |
Lucene/Solr 3.1からはAnalyzerの新しいAPIを使わないと古いAnalyzerは動作しないことになっています。Solr本で配布しているJARは古いAPIを使っているので、Solr 3.1では動作しません。

本日lucene-gosenに関する記事を書きましたので、Solr 3.1ではそちらを使うようにして下さい。
| 関口 | 2011/04/12 11:40 AM |
ご確認いただきましてありがとうございます。
lucene-gosenで確認してみます。
| nozawa & sugiyama | 2011/04/14 12:02 PM |
はじめまして。
「ApacheSolr入門」で勉強させていただいています。

現在、第7章のマルチコアの箇所ですが、
java -Dsolr.solr.home=c:/solr/example/multicore -jar start.jar
としても、うまく起動しません。

[環境]
OS:WindowsServer2008R2 x64
JDK:1.6.0_24
Solr:1.4.1
sen:1.2.2.1

エラーメッセージで、下記の記述があります。

致命的:org.apache.solr.common.SolrWxception:Unknown fieldtype 'text_sen' specified on fiele title
とあります。

コマンドを、
java -Dsolr.solr.home=c:/solr/example/multicore -Dsen.home=c:/sen -jar start.jar
としても同じメッセージがでます。

ただ、
java -Dsen.home=c:/sen -jar start.jar
とすると正常に起動します。
また、solrconfig.xmlとschema.xmlをデフォルトのままであっても正常起動します。

schema.xmlの記述に問題があるのでしょうか。

よろしくお願いいたします。
| tada | 2011/07/04 2:46 PM |
> schema.xmlの記述に問題があるのでしょうか。

はい、そうです。text_sen というフィールド型を知らない(Unknown fieldtype 'text_sen' specified on fiele title)というエラーメッセージなので、schema.xml中にtitleフィールドでtype="text_sen"としているのにもかかわらず、text_senという<fieldType/>を設定していない、というエラーです。
| 関口 | 2011/07/04 8:49 PM |
早々の回答ありがとうございます。
schema.xmlとエラーメッセージを確認しますと、SenTokenizerFactoryのclassのロードに失敗しているようです。schema.xmlを訂正して対応いたします。
ご指導ありがとうございました。
| tada | 2011/07/05 4:57 PM |
たびたび申し訳ありません。
エラーを確認しますと、fieldTypeがtext_senをロードするところで、
org.apache.solr.common.SolrException:Error loading class 'solrbook.analysis.SenTokenizerFactory'
となります。

schema.xmlは、下記となっています。
<fieldType name="text_sen" class="solr.TextField" positionIncrementGap="100" >
<analyzer type="index">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ja.txt"/>
<tokenizer class="solrbook.analysis.SenTokenizerFactory"/>
<filter class="solrbook.analysis.KatakanaStemFilterFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms-ja.txt" ignoreCase="true" expand="true" tokenizerFactory="solrbook.analysis.SenTokenizerFactory"/>
<filter class="solrbook.analysis.POSFilterFactory" deny="pos-deny.txt"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords-ja.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ja.txt"/>
<tokenizer class="solrbook.analysis.SenTokenizerFactory"/>
<filter class="solrbook.analysis.KatakanaStemFilterFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms-ja.txt" ignoreCase="true" expand="false" tokenizerFactory="solrbook.analysis.SenTokenizerFactory"/>
<filter class="solrbook.analysis.POSFilterFactory" deny="pos-deny.txt"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords-ja.txt"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>

filterのファイルなどは、すべてconfにコピーしましたが同じです。
お手数おかけいたしますが、よろしくお願いいたします。
| tada | 2011/07/06 10:58 AM |
> org.apache.solr.common.SolrException:Error loading class 'solrbook.analysis.SenTokenizerFactory'

SenTokenizerFactoryクラスのロードができない=>solrbook.jarファイルが、$SOLR_HOME/lib/に配置されていない、というようなことではないでしょうか。
| 関口 | 2011/07/06 6:01 PM |
回答ありがとうございます。

-Dsolr.solr.home=c:/solr/example/multicore と記述していますので、multicoreのフォルダにlibを作成し、sen.jarとsolrbook.jarをC:/solr/example/sore/libよりコピーし、実行しました。
すると、
java.lang.NoClassDefFoundError: org/apache/solr/analysis/BaseTokenizerFactory
となりました。

試しに、C:/solr/example/solrにsolr.xmlとcore0、core1のフォルダをコピーし、C:/solr/exampleより、Solrホームを指定せずに実行しましたが、同じ結果となりました。
BaseTokenizerFactory.classをどこかに設定すればよいのでしょうか。
お忙しいところ申し訳ありませんが、よろしくお願いいたします。
| tada | 2011/07/07 11:27 AM |
いつもお世話になっております。

もう一度、最初からSolrを設定しなおすと正常に起動することができました。

ありがとうございます。今後ともよろしくお願いいたします。
| tada | 2011/07/07 3:42 PM |
いつもお世話になっております。
すいません、また詰まってしまいました。
Cellを使用してpdfファイルの前文検索をする為、下記コマンド処理をするのですが、ダブルコーテーション内の全角文字の文字化けでうまくいきません。

curl -s --data-binary @Test-Sample.pdf -H "Content-type:text/html; charset=utf-8" "http://localhost:8983/solr/update/extract?literal.url=http://test-server/AAA/問題/Test-Sample.pdf&literal.title=Test-Sample.pdf&map.content=summary&commit=true"

WindowsでCygwinを使用していますが、set LANG=ja_JP.UTF-8を指定しても、全角文字が化けて登録されてしまいます。

また、urlは、実際httpでファイルを開くことができるurlとしたいので、全角文字が入ってしまいます。

何か対応策ありますでしょうか。たびたび申し訳ありませんが、よろしくお願いいたします。
| tada | 2011/07/22 4:02 PM |
URL encodingしてないから・・・ではないでしょうか。
| 関口 | 2011/07/23 8:39 AM |
関口様 基本的な質問ばかりで申し訳ありません。URLencodingを行ってからインデックス作成成功しました。ただ、Cellを使用した全文検索で止まっています。テキストのサンプル、youryou.docの取り込みで、動作確認は正常にいくのですが、Titleを抽出した時、管理画面で確認すると
-<result name="response" numFound="1" start="0">
-<doc>
-<arr name="author">
<str />
</arr>
<str name="title">検索システム(略)</str>
となり、その後全データ抽出を行うと<str name="s_cpmtemt">以降の表示がでてきません。schema.xmlの設定が間違えているのでしょうか。
| tada | 2011/07/25 2:38 PM |
何度もすいません。いろいろ試してみるとあることがわかりました。Windows環境でインデックスを作成しようとしていますが、バッチにて、
cd C:¥cygwin¥bin
set LANG=ja_JP.UTF-8
bash --login -i -c "/cygdrive/c/batch/Index_maker.sh"
とコマンドを発行し、そのIndex_maker.shは、
cd /cygdrive/O:/規格/
curl -s --data-binary @AAA-0100.pdf -H "Content-type:text/html; charset=utf-8" "http://localhost:8080/solr/update/extract?literal.url=http://test-s/%E8%A6%8F%E6%A0%BC/AAA-0100.pdf&literal.title=AAA-0100.pdf&map.content=summary&commit=true"
curl -s --data-binary @AAA-0200.pdf (以下略)
と記入しています。
このshコマンドを手動でcygwinに直打ちすると、中身の全文検索も可能ですが、バッチで行うとタイトルなどの検索しかできません。WindowsバッチにてCygwinを起動するとうまくいかないのでしょうか。

| tada | 2011/07/25 6:09 PM |
毎度お世話になっております。
上記の問題ですが、自己解決いたしました。
シェルのcdコマンドで、
cd O:/規格/
とすると正常にディレクトリ移動できました。頭に/cygdrive/をつけないでよかったみたいです。

いろいろとお世話になりありがとうございました。
| tada | 2011/07/26 8:36 AM |
いつもお世話になっております。

Cellを使用してPDFの全文検索を構築していますが、ほとんどのpdfでエラーが発生し、読み込めません。
エラー内容を確認すると、
org.apache.solr.common.SolrException: org.apache.tika.exception.TikaException: Unable to extract PDF content
とCaused by: org.apache.tika.exception.TikaException: Unable to extract PDF content

Caused by: java.io.IOException: Unknown encoding for 'Identity-V'
が見つかりました。 'Identity-V'は、PDFの縦書きのフォントなのですが、どうすれば読み込めるようになるでしょうか。読み込むのが無理であれば、スルーすることはできますでしょうか。

何度も質問をし、申し訳ありませんがよろしくお願いいたします。
| tada | 2011/08/05 8:58 AM |
エラーの原因などについてはわかりませんが、スルーするにはこういうのがあります:

https://issues.apache.org/jira/browse/SOLR-2480?focusedCommentId=13033445&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13033445
| 関口 | 2011/08/05 10:02 AM |
大変返答が遅くなり申し訳ありません。
回答ありがとうございます。

いろいろと試してみます。
ありがとうございました。
| tada | 2011/08/17 1:54 PM |
はじめまして、関口様

先日こちらの本を買って作業してるのですがうまくいきません。恐縮ですが質問させてください

問題は、形態素解析でトークナイズの失敗です(n-gramの導入はしていません)
環境は以下の通りです
centOS5.6
apache-solr3.5.0
sen-1.2.2.1

この状況でP.21の処理をすると Unknown Field: text_sen というエラーがでてしまいます(解析結果は出ない)
どう対処したら良いのでしょうか? example/logsにログが出力されておらず、どこから原因を探せば良いのかわかりません
(このFieldとはどのファイルのどこに該当するのでしょうか)
気になるのは
http://localhost:8983/solr/admin/analysis.jsp
に表示されてる以下の部分です
cwd=/usr/local/apache-solr-3.5.0/example SolrHome=solr/./

この SolrHome=solr/./  は問題ないんでしょうか?

また、形態素解析の準備をしたところ P.13でのサンプルデータの検索も本に書いてある通りの結果を返さなくなりました
以下が返って来ます
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
<lst name="params">
<str name="indent">on</str>
<str name="start">0</str>
<str name="q">ipod</str>
<str name="version">2.2</str>
<str name="rows">10</str>
</lst>
</lst>
<result name="response" numFound="0" start="0"/>
</response>


基本的な部分を理解していない質問かもしれず申し訳ないのですが、ご回答いただければ幸いです
よろしくお願いします
| 太郎 | 2012/02/07 10:27 AM |
Solr 3.x の場合は、Senではなく、lucene-gosen を使ってください。まずは辞書が内包されているjarをダウンロードし、$SOLR_HOME/lib に配置するだけで動きます。
| 関口 | 2012/02/07 10:45 AM |
ありがとうございました
lucene-gosenで対応出来ました
| 太郎 | 2012/02/07 2:28 PM |
はじめまして。
先日「Apache Solr入門」を購入し、勉強しているのですが、
「1.6.2 形態素解析」でSen の構築がうまくできません。
下記のエラーが発生し、辞書のビルドに失敗してしまいます。

--
download:
[get] Getting: http://chasen.aist-nara.ac.jp/stable/ipadic/ipadic-2.6.0.tar.gz
[get] To: /Users/MYNAME/sen/dic/ipadic-2.6.0.tar.gz
[get] Error opening connection java.io.FileNotFoundException: http://chasen.aist-nara.ac.jp/stable/ipadic/ipadic-2.6.0.tar.gz
[get] Error opening connection java.io.FileNotFoundException: http://chasen.aist-nara.ac.jp/stable/ipadic/ipadic-2.6.0.tar.gz
[get] Error opening connection java.io.FileNotFoundException: http://chasen.aist-nara.ac.jp/stable/ipadic/ipadic-2.6.0.tar.gz
[get] Can't get http://chasen.aist-nara.ac.jp/stable/ipadic/ipadic-2.6.0.tar.gz to /Users/MYNAME/sen/dic/ipadic-2.6.0.tar.gz
--

http://chasen.aist-nara.ac.jp/stable/ipadic/ipadic-2.6.0.tar.gz」に辞書ファイルが
存在していないのだと思いますが、どのように対処すればよろしいでしょうか。
| ryo | 2012/02/18 9:35 PM |
URLがまちがっているようですよ:

http://chasen.naist.jp/stable/ipadic/ipadic-2.6.0.tar.gz

が正しいです。あと、jarに辞書が内蔵されたlucene-gosenの方が簡単です。少し上のコメントをご覧ください。
| 関口 | 2012/02/19 11:54 AM |
関口様

ありがとうございます。
URLを修正したらビルド出来ました。
lucene-gosenも試してみたいと思います。
| ryo | 2012/02/19 5:05 PM |









http://lucene.jugem.jp/trackback/374
新発売の Apache Solr 入門 を読みました
技術評論社様の新刊、"Apac...
| 侍ズム | 2010/02/22 12:26 AM |
彼氏が LIKE 検索使ってた。別れたい… (もしくは Solr 入門とか Tritonn のインクリメンタルバックアップとか)
LIKE 検索だとデータ増えてきた時なんか恥ずかしいwww 下向いちゃうしww 男にはせめて全文検索エンジン使ってほしい・・・ 検索が遅すぎてユーザー帰っちゃったら・・・・もう最悪www せめて普通 Tritonn や Solr くらいは使って欲しい。 常識的に考えて欲しいだけなん
| kazuhoのメモ置き場 | 2010/02/22 10:09 PM |
+ Solrによるブログ内検索
+ PROFILE
   1234
567891011
12131415161718
19202122232425
262728    
<< February 2017 >>
+ 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