我正在使用Hibernate Search在我的网络应用中搜索电视节目的标题。
我可以在fuzzy()
上使用方法keyword()
来对关键字进行模糊搜索,但我需要考虑整个标题,因此我使用phrase()
代替keyword()
。方法fuzzy()
没有为phrase()
定义,所以我想知道是否有一种简单的方法可以使用Hibernate Search对短语进行模糊搜索。
答案 0 :(得分:1)
如果你只需要一个带有slop的PhraseQuery
(即抛出额外的单词),那么你可以在短语查询上设置slop,如:
queryBuilder.phrase()
.setSlop(2)
.onField("myField")
.sentance("this sentence missing something")
.createQuery();
但是,我不知道Hibernate API中支持在短语中嵌入模糊查询的任何内容,但在Lucene中,您可以使用SpanQuery
API来构建它。特别是SpanMultiTermQueryWrapper
和SpanNearQuery
是您需要的。类似的东西:
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);