如何配置 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 也不起作用(