0

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);
4

0 に答える 0