我正在寫一個Android應用程序,我需要快速搜索大量的文本。文字是固定的;我想要離線計算索引並將它們與應用程序一起發貨。這裏是搜索庫的要求(數字1-5是關鍵):圖書館搜索Android上的非結構化文本
- 必須支持Unicode字符集。
- 搜索需要在文本中查找任意子字符串(而不僅僅是術語或術語前綴)。
- 搜索需要返回所有匹配。
- 該庫應該儘可能輕量級。特別是,應該可以刪除庫的索引(和其他)部分,並僅使用搜索API打包應用程序。
- 圖書館許可證必須允許它在專有的組合作品中使用。
- 不需要形態分析(詞幹)或停用詞處理。
- 通配符和/或正則表達式搜索會很好,但不是必需的。
- 接近搜索也不錯。
- 同樣布爾搜索。
FTS3(附帶SQLite的)是偉大的關於要求4,但遺憾的是無法滿足要求的2(它可以找到長期的前綴,但沒有後綴—對「吃」可以找到「吃搜索「但不是」座位「。)
我看了一些庫,包括Lucene,Minion和egothor。他們似乎都裝載了我不需要的強大功能。我也有這種印象(儘管這可能是錯誤的),很難對這些庫進行分區,只是將搜索API打包。 (我也聽說很難讓Lucene在Android上工作,因爲它依賴於Android的Java不包括的java.rmi。)
有沒有人知道一個庫可以滿足我需要(或可以適應)?如果庫滿足要求,我不反對將其他語言的搜索API移植到Java中。
SQLite FTS3的自定義標記器可能對你有用嗎? –
@JuozasKontvainis - 我先看了一眼。有兩個問題。首先,自定義標記器只能用於更改被視爲標記的東西;它不能改變FTS3的基本操作。從我讀到的內容來看,任何形式的標記化都不會解決基於標記的索引的基本限制:它可以用來查找標記前綴,但不能用於後綴。其次,我不知道甚至可以在Android版本的SQLite中使用自定義標記器。 –