0

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

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

4

1 回答 1

2

问题是您正在定义一个短语查询,您应该使用关键字

Query q = qb.keyword()
    .onField( "myField" )
    .matching( "12345%SEPERATOR%4" )
    .createQuery();
于 2013-03-04T16:14:38.457 回答