lucene3.6.2ライブラリを使用してJavaderbyデータベースの複数のフィールドを検索するデスクトップアプリケーションがあります。検索のために単語が入力されると、luceneシステムはその単語に一致するものを返します。一方、完全な単語ではなく、より大きな単語luceneの一部である文字列を入力すると、その文字列に一致するものが返されません。
例:「national」は利用可能な一致を返します
ただし、文字列「natio」は結果を返しません。
文字列を入力できるようにしたい
「natio」の場合、luceneはすべての「natio*」を一致する結果として返します。
以下は、アプリケーションからのコードスニペットです。
this is a the code that creates the lucene in-memory director
Directory index = new RAMDirectory();
StandardAnalyzer analyzer = new StandardAnalyzer(matchVersion);
IndexWriterConfig IWConfig = new IndexWriterConfig(Version.LUCENE_36, analyzer);
IndexWriter iw = new IndexWriter(index,IWConfig) ;
//Connection to DB
con = DriverManager.getConnection(host, uName, uPass);
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
String sql = "SELECT * FROM APP.REGISTRY";
rs = stmt.executeQuery(sql);
//creating the docuetns
rs.beforeFirst();
while(rs.next()) {
doc = new Document();
doc.add(new Field("subject",rs.getString("SUBJECT"),Field.Store.YES,Field.Index.ANALYZED));
doc.add(new Field("letter_from",rs.getString("LETTER_FROM"),Field.Store.YES,Field.Index.ANALYZED));
iw.addDocument(doc);
}
//Oen the index
IndexReader ir = IndexReader.open(index);
//create the searcher object
IndexSearcher searcher = new IndexSearcher(ir);
QueryParser queryParser = new MultiFieldQueryParser(Version.LUCENE_36,
new String[]{"subject","letter_from","remarks","office_dispatched_to"}, analyzer);
Query query = queryParser.parse(qString);