原因
前段時間,在開發**時需要搜尋功能。因為專案需求的原因,需要使用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...