2016-07-28 74 views
0

早些時候我們搜索像「David Azrael父親」。它將所有結果名稱返回爲Father或David或Azrael。如何使用Hibernate Lucene搜索一個完整的短語和單個詞條?

以下是以圖片代碼:

String[] FIELDS = { "id", "person.firstName", "person.middleName", "person.lastName" }; 
for (String field : FIELDS) { 
      for (String match : pattern) {  
        bool.should(qb.keyword().wildcard().onField(field).matching(match).createQuery()); 
      } 
     } 
     query = bool.createQuery(); 

除了上面的情況,現在有額外的要求,如果最終用戶想要搜索「父親大衛死神」;他只應得到一個結果。

意思是如果我們搜索「David Azrael父親」;那麼只有有這個名字的結果纔會出現,但如果用戶搜索「Father Azrael」,那麼它應該像現在一樣工作。

那麼需要用上面的代碼來實現相同的變化呢?

回答

0

您可以使用短語查詢,如在文檔的section 5.1.2.4

bool.should(qb 
    .phrase() 
    .onField(field) 
    .sentence("Father David Azrael") 
    .createQuery()); 

我不知道你的意思怎麼樣「父親大衛死神」正在接受治療不同於「父親死神」,所以我不會評論這一部分,但這就是你如何創建一個詞組查詢。您可以將短語與現有的通配符查詢結合使用,方法是將兩者都添加到布爾查詢中以獲得兩組結果,而短語匹配通常會得到最高分數。或者,您可以先運行短語查詢,並在沒有結果時回退通配符查詢。

+0

@femtoRogn 父親是名,大衛是中間名,以色列是姓氏。在單一字段,如名字;我們能夠在上面跑步嗎?讓我試試。另外 「父親Azrael」是指如果名字或姓氏有父親和以色列都 – fatherazrael

相關問題