Hibernate在查询中搜索忽略分析器

时间:2013-03-04 16:04:03

标签: lucene hibernate-search

我正在尝试使用聚合两个字段的自定义字段桥来查询字段。典型值如下所示:

myField:12345%FIELDSEPERATOR%4

这是12345和4的组合。它被正确编入索引,但是使用hibernate搜索查询API,如何禁用分析器?

FullTextEntityManager em = getFTEM();
SearchFactory searchFactory = em.getSearchFactory();
QueryBuilder qb = searchFactory.buildQueryBuilder().forEntity(User.class).get();
Query q = qb.phrase()
            .onField("myField")
            .ignoreAnalyzer()
            .sentence("12345%SEPERATOR%4")
            .createQuery();

q这里被解析为myField:"12345 seperator 4",即使我指定了ignoreAnalyzer,也会破坏搜索。为了进行比较,以下内容生成一个有效的查询

TermQuery tq = new TermQuery(new Term("myField", "12345%SEPERATOR%4"));

结果查询:myField:"12345%SEPERATOR%4"

我知道我可以简单地使用TermQuery,但我想享受Hibernate搜索的其他简单功能,例如.boostedTo()。

使用内部使用Lucene 3.1的Hibernate Search 3.4.2

1 个答案:

答案 0 :(得分:2)

问题是您要定义词组查询,您应该使用关键字

Query q = qb.keyword()
    .onField( "myField" )
    .matching( "12345%SEPERATOR%4" )
    .createQuery();