2014-03-02 109 views
0

我正在使用Hibernate Search在我的web應用程序中搜索電視節目的標題。使用Hibernate搜索短語的模糊搜索

我可以以perfom關鍵字模糊搜索使用方法fuzzy()keyword(),但我需要考慮整個標題,所以我用phrase()代替keyword()。方法fuzzy()沒有爲phrase()定義,所以我想知道是否有一種簡單的方法可以使用Hibernate Search在短語上實現模糊搜索。

回答

1

如果你只是需要一個坡PhraseQuery(即,在拋出多餘的話),那麼你可以設置斜率上短語查詢,如:

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); 
+0

謝謝。目前我會堅持我已經使用的slop方法。將來我會嘗試實現一個拼寫檢查器,因爲我認爲這將是一個比模糊搜索更好的整體解決方案。 –