【发布时间】:2013-01-10 01:32:17
【问题描述】:
如何配置 lucene + hibernate 并开发通过该字段值的任何确切部分匹配某个字段的通配符查询?例如,如果我们为某个字段“标题”编制了索引,并且它只有两个条目:“我的第一个通配符查询”。和“我的第二个通配符查询。”;那么如果我们查询“irsT WiLdCaRd q”,那么它必须只返回第一个。它也不必区分大小写。
我尝试过这样的事情:
FullTextSession ftSession = org.hibernate.search.Search.getFullTextSession((Session) em.getDelegate());
QueryContextBuilder qbc = ftSession.getSearchFactory().buildQueryBuilder();
EntityContext entityContext = qbc.forEntity(Book.class);
QueryBuilder qb = entityContext.get();
org.apache.lucene.search.Query q = qb.keyword().wildcard().onField("title")
.ignoreAnalyzer().matching("*" + QueryParser.escape("irsT WiLdCaRd q").toLowerCase() + "*").createQuery();
FullTextEntityManager ftEm = org.hibernate.search.jpa.Search.getFullTextEntityManager(em);
final FullTextQuery ftq = ftEm.createFullTextQuery(q, Book.class);
List list = ftq.getResultList();
它不起作用,因为它是面向关键字的,并且没有用于短语的通配符的类比。使用直接 WildcardQuery 也不起作用(
【问题讨论】:
标签: hibernate lucene hibernate-search