使用Hibernate Search对短语进行模糊搜索

时间:2014-03-02 20:34:16

标签: java hibernate lucene hibernate-search

我正在使用Hibernate Search在我的网络应用中搜索电视节目的标题。

我可以在fuzzy()上使用方法keyword()来对关键字进行模糊搜索,但我需要考虑整个标题,因此我使用phrase()代替keyword()。方法fuzzy()没有为phrase()定义,所以我想知道是否有一种简单的方法可以使用Hibernate Search对短语进行模糊搜索。

1 个答案:

答案 0 :(得分:1)

如果你只需要一个带有slop的PhraseQuery(即抛出额外的单词),那么你可以在短语查询上设置slop,如:

queryBuilder.phrase()
    .setSlop(2)
    .onField("myField")
    .sentance("this sentence missing something")
    .createQuery();

但是,我不知道Hibernate API中支持在短语中嵌入模糊查询的任何内容,但在Lucene中,您可以使用SpanQuery API来构建它。特别是SpanMultiTermQueryWrapperSpanNearQuery是您需要的。类似的东西:

FuzzyQuery query1 = new FuzzyQuery(new Term("field", "fuzy"));
FuzzyQuery query2 = new FuzzyQuery(new Term("field", "phrse"));
Query wrappedQuery1 = new SpanMultiTermQueryWrapper<FuzzyQuery>(query1);
Query wrappedQuery2 = new SpanMultiTermQueryWrapper<FuzzyQuery>(query2);
SpanQuery[] clauses = {wrappedQuery1, wrappedQuery2};
SpanNearQuery(clauses, 0, true);