使用HibernateSearch的橋接器功能

2021-06-07 08:10:06 字數 1390 閱讀 2812

原因

前段時間,在開發**時需要搜尋功能。因為專案需求的原因,需要使用lucene,不過在使用的過程中,遇到了乙個特別的需求。當前我們的資料庫,主要有三種資料,就是英繁簡三種語言版本的資料,英文一般都有資料,但是繁簡就不一定了,繁簡體有可能會有空的資料出現,為了給使用者更好的搜尋體驗,當使用者輸入簡體資料,但資料庫只有繁體資料時,需要實現就算資料庫中簡體沒有資料,只要繁體有匹配的資料,都能顯示結果給使用者。

解決方案

由於我們在使用lucene的同時,也引入了hibernatesearch。hibernatesearch為jpa提供了良好的支援,所以要解決以上的問題,我們可以借助它的橋接器功能。通過相關的文件,我們了解到hibernatesearch提供了乙個叫fieldbridge的介面,利用這個介面,可以用來對欄位進行自定義索引,從而解決繁簡體的問題。

public class i18nfieldbridge

implements fieldbridge, twowayfieldbridge

/*** 設定指定的值.

* @param name 欄位名

* @param value 要設定的值

* @param document document物件

* @param luceneoptions lucene的選項值

*/public void set(string name, object value, document document, luceneoptions luceneoptions)

}else

}else}}

else

} /**

* 得到所有語言版本的資訊。

* @param name 欄位名

* @param document document物件

* @return 語言版本的資訊

*/private string getalllanguagemessage(string name, document document, string stringvalue)

/*** 轉換為字串.

* @param value 要轉換的物件

* @return 轉換後的字串

*/public string objecttostring(object value)

}

**不是太複雜,主要是實現當中的set方法,利用以前我們所寫的i18n功能,實現繁簡體的轉換之後,再進行索引,例如如果檢測到繁體語言版本沒有資料,則將繁體資料進行i18n轉換,反之亦然。

參考資料

網上有人翻譯了hibernatesearch的技術文件,雖然翻譯得不是特別好,但還過得去,可以作乙個參考:

使用GraphEdit使用

1 註冊元件。其實乙個filter就是乙個com元件,所以使用之前需要註冊,可以有兩種方法對元件進行註冊。1.直接使用命令。命令列下輸入 regsvr32 hqtlystd.ax 編譯之後你會在工程目錄下的debug中找到hqtlystd.ax,這個就是要用的filter 即可註冊成功。2.vc6....

MySQL使用學習使用 mysql學習使用

1 mysql學習 1 安裝 ubuntu下直接安裝 apt get install mysql server 2 檢查伺服器是否啟動 sudo netstat tap grep mysql,如果啟動成功,出現以下資訊 tcp00localhost.localdomain mysql listen ...

學習使用CSDN markdown使用

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...