Hibernateの検索初心者の質問
-
26-09-2019 - |
質問
私はちょうど休止検索始めています。私は、検索を行うために使用していたコードが基準ガイドから取得されます:
FullTextEntityManager fullTextEntityManager =
Search.getFullTextEntityManager(em);
EntityTransaction transaction = em.getTransaction();
try
{
transaction.begin();
// create native Lucene query using 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
SearchFactory sf = fullTextEntityManager.getSearchFactory();
QueryBuilder qb = sf
.buildQueryBuilder().forEntity(Item.class).get();
org.apache.lucene.search.Query query = qb
.keyword()
.onFields("title", "description")
.matching(queryString)
.createQuery();
// wrap Lucene query in a javax.persistence.Query
javax.persistence.Query persistenceQuery =
fullTextEntityManager.createFullTextQuery(query, Item.class);
// execute search
@SuppressWarnings("unchecked")
List<Item> result = persistenceQuery.getResultList();
transaction.commit();
return result;
}
catch (RuntimeException e)
{
transaction.rollback();
throw e;
}
Iは、クエリ用語が論理和(OR)で用語として解釈されることに気づきます。私は彼らが代わりに連動用語として解釈されたい。
解決
クエリーパーサーを使用する場合、あなたはこのようにそれを行うことができます:
QueryParser queryParser = new QueryParser("all", new GermanSnowBallAnalyzer());
queryParser.setDefaultOperator(QueryParser.AND_OPERATOR);
Query luceneQuery = queryParser.parse(QueryParser.escape(keyword));
他のヒント
あなたはHibernateの検索クエリDSLを使用しているので、
あなたのクエリをとして書くことができます:
Query luceneQuery = qb
.bool()
.must( qb.keyword().onField("title").matching(queryString).createQuery() )
.must( qb.keyword().onField("description").matching(queryString).createQuery() )
.createQuery();
クエリ文字列は、Luceneクエリパーサーを経由して解析されないことに注意してください。それはあなたが彼らのために検索したいという用語を含むことがある(アナライザが適用されます!)
私はあまりのHibernate Searchを知らないが、私は「キーワード()」は、一般ORベースされているタグに基づいて検索をご用意しておりますが推測ます。
上記の二つのリンクで同様の質問はそれが役に立てば幸い、があります。 Luceneのの中キーワード(OR、AND)検索 https://forum.hibernate.org/viewtopic.php?f= 9&T = 1008903&= 0 の
開始所属していません StackOverflow