1

hibernate-search-4.1.1.Final.jar とすべてのランタイム依存関係を使用して、休止状態の全文検索を作成しました。このアプリケーションにエラーはありません。しかし、クエリ DSL を使用しない私の Lucene クエリは結果を返しません。つまり、テーブル内の行は返されません。誰でも私を助けてください。

メイン検索プログラム この Java コードは、休止状態の全文検索を実行するために使用されます。

   public class MainSearch {
                public static void main(String args[]) {
            Iterator iterator;
            Session session = HibernateUtil.getSession();
            // FullTextSession fullTextSession = Search.getFullTextSession(session);

            FullTextSession fullTextSession = Search.getFullTextSession(session);
            org.hibernate.Transaction tx = fullTextSession.beginTransaction();

            // create native Lucene query unsing the query DSL
            // alternatively you can write the Lucene query using the Lucene query
            // parser
            // or the Lucene programmatic API. The Hibernate Search DSL is
            // recommended though
            QueryBuilder qb = fullTextSession.getSearchFactory()
                    .buildQueryBuilder().forEntity(Book.class).get();
            org.apache.lucene.search.Query query = qb.keyword()
                    .onFields("title", "subtitle", "authors.name").matching("cpp")
                    .createQuery();

            // wrap Lucene query in a org.hibernate.Query
            org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(
                    query, Book.class);

            // execute search

            List result = hibQuery.list();
            iterator = result.iterator();
            while (iterator.hasNext()) {
                System.out.print(iterator.next() + " ");
            }
            System.out.println();
            // Check list empty or not
            if (result.isEmpty()) {
                System.out.println("Linked list is empty");
            }

            tx.commit();
            session.close();
        }
    }
4

1 に答える 1

2

DB (コード内) には何も含めませんでした。コードの外で行った場合は、検索できるようにする前に DB にインデックスを付ける必要があります。これを行うには、これを実行します。

FullTextSession fullTextSession = Search.getFullTextSession(session);
fullTextSession.createIndexer().startAndWait();

そして、何かを検索するために開いているトランザクションは必要ないので、そのorg.hibernate.Transaction tx = fullTextSession.beginTransaction();行を削除できます (そして、上記の行に置き換えstartAndWait()ます) 。

参照: http://hibernate.org/search/documentation/getting-started/#indexing (Lucene は DBMS を認識せず、その逆も同様であるため、Hibernate Search はそれらの間のリンクであり、データのインデックス作成がそれを作るものです) Lucene で検索可能)

于 2014-09-21T11:24:06.077 に答える