#author("2020-11-06T05:35:19+00:00","","")
#topicpath
----
#contents

**Luceneとは [#j5560836]

LuceneはJavaで書かれた検索エンジンです。インデックスを作成するインデクサと、検索を行うエンジンの二つでなっています。「辞書」と呼ばれるファイルを用いて、あらかじめ検索対象からインデックスを作成しておき、検索時にはインデックスを検索するという仕組みです。アプリで検索機能を利用したくて使ってみました。

**下準備 [#w8cdcb98]
***辞書の作成 [#sf2ef023]
Luceneを使うにはあらかじめインデックスを作成しておきますが、そのための辞書も
自分で作成しておく必要があります。そのためのライブラリが、Senと呼ばれるモノです。SenはJavaで実装された形態素解析器です。Sen ProjectのWEBSiteは[[こちら:http://ultimania.org/sen/]]。

***SenとLuceneのダウンロード [#sf55e08c]
[[このサイト:https://sen.dev.java.net/servlets/ProjectDocumentList?folderID=755&expandFolder=755&folderID=0]]
より
-lucene-ja-1.4.2sen1.1.zip
-sen-1.1.zip

をダウンロードします。適当なところに上のアーカイブは解凍しておきましょう。



***辞書作成 [#ad29064c]
辞書を作成するために ipadic-2.6.0.tar.gz というファイルが必要なのですが、インターネットにアクセスできる環境では自動的にダウンロードされてきます。イントラの人は
 http://chasen.naist.jp/stable/ipadic/
よりipadic-2.6.0.tar.gz をダウンロードし、senのdicディレクトリにipadic-2.6.0.tar.gzのままおいておきましょう。

辞書を作成するには以下のコマンドを実行します。
 >cd c:/javatools/sen/ <-senを解凍したディレクトリ
 >cd dic
 >ant -Dperl.bin=c:/cygwin/bin/perl.exe
以上で辞書が作成されます。


**コマンドプロンプトを使う、JavaAPIを使う [#f80faa64]
ここから先はコマンドプロンプトでインデックス作成、検索を行うインタフェースと、JavaのAPI経由でインデックス作成、検索を行うインターフェースの2通りが存在します。

***インデックスの作成(プロンプト) [#r8ed67f0]
ためしにEclipseのworkspaceのインデックスを作成します。コマンドプロンプトで
 > set SEN_HOME=c:\javatools\sen
 > set LUCENE_HOME=c:\javatools\lucene-ja
 > set PATH=%PATH%;%LUCENE_HOME%\bin
 > mktextindex.bat -create -index hoge C:\workspace
でインデックスが作成されます。

オプションの意味は
:-create|新規に作成するときに指定(これ指定しないとエラーになるので注意!)
:-index hoge| hogeはインデックスを作成するディレクトリ

最後の引数C:\workspaceはドキュメントが格納されたディレクトリです。

***検索する(プロンプト) [#i6479e6a]






***インデックスの作成(Java API) [#i9b9ad16]
***検索する(Java API) [#y08557e1]





**やってみて [#d28af470]
Luceneのサイトを色々見ましたが、どのサイトを拝見してもディレクトリ階層上の「ファイル」を一単位として検索していましたが、Luceneはその形式に依存していないんですね。つまり、Documentクラスのインスタンスが何と一対一対応するかは、インデックスを作成するやり方で決まるわけです。Documentクラスをファイル単位で作成すると、上のようなファイルを対象にした全文検索となります。DocumentクラスをDBのRow単位とすると、レコードを対象とした検索になります。



----
以下まだメモ
 document.add(Field.Text("code", code)); <- 検索対象になる。さらに保存される
 document.add(Field.UnIndexed("fullName", fullName)); <- 検索対象にならない。保存するだけ(このキーでで値は取得できる)
 document.add(Field.UnStored("name", name)); <-検索対象になるけど、保存されない(このキーでは値を取得できない)
 document.add(Field.Keyword("name", name)); <-ようわからん。完全一致になる??保存する。




**関連リンク [#efdc1720]
-[[Luceneとは?:http://tidus.ultimania.org/wiki/index.php?Lucene]] <-まずはここを見よう
-[[日本語全文検索エンジンソフトウェアのリスト:http://www.kusastro.kyoto-u.ac.jp/~baba/wais/other-system.html]]
-[[形態素解析システム茶筌:http://chasen.naist.jp/hiki/ChaSen/]]

----
この記事は
#vote(おもしろかった[2],そうでもない[0])
#vote(おもしろかった[6],そうでもない[0])

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS