2011-08-19 72 views
2

我正在寫一個Android應用程序,我需要快速搜索大量的文本。文字是固定的;我想要離線計算索引並將它們與應用程序一起發貨。這裏是搜索庫的要求(數字1-5是關鍵):圖書館搜索Android上的非結構化文本

  1. 必須支持Unicode字符集。
  2. 搜索需要在文本中查找任意子字符串(而不僅僅是術語或術語前綴)。
  3. 搜索需要返回所有匹配。
  4. 該庫應該儘可能輕量級。特別是,應該可以刪除庫的索引(和其他)部分,並僅使用搜索API打包應用程序。
  5. 圖書館許可證必須允許它在專有的組合作品中使用。
  6. 不需要形態分析(詞幹)或停用詞處理。
  7. 通配符和/或正則表達式搜索會很好,但不是必需的。
  8. 接近搜索也不錯。
  9. 同樣布爾搜索。

FTS3(附帶SQLite的)是偉大的關於要求4,但遺憾的是無法滿足要求的2(它可以找到長期的前綴,但沒有後綴—對「吃」可以找到「吃搜索「但不是」座位「。)

我看了一些庫,包括Lucene,Minion和egothor。他們似乎都裝載了我不需要的強大功能。我也有這種印象(儘管這可能是錯誤的),很難對這些庫進行分區,只是將搜索API打包。 (我也聽說很難讓Lucene在Android上工作,因爲它依賴於Android的Java不包括的java.rmi。)

有沒有人知道一個庫可以滿足我需要(或可以適應)?如果庫滿足要求,我不反對將其他語言的搜索API移植到Java中。

+0

SQLite FTS3的自定義標記器可能對你有用嗎? –

+0

@JuozasKontvainis - 我先看了一眼。有兩個問題。首先,自定義標記器只能用於更改被視爲標記的東西;它不能改變FTS3的基本操作。從我讀到的內容來看,任何形式的標記化都不會解決基於標記的索引的基本限制:它可以用來查找標記前綴,但不能用於後綴。其次,我不知道甚至可以在Android版本的SQLite中使用自定義標記器。 –

回答

1

Apache Lucy - Lucene到C的一個鬆散的端口 - 可能值得一看。

+0

這很有趣,但我不知道這是我目前項目的正確方向邁出的一步。據我所知,Lucy包含了Lucene的所有功能,包括所有的索引構建基礎設施。它看起來並不像看起來那麼簡單,因爲它只用C而不是Java。另外,Java比C更適合Android應用程序(這需要使用NDK)。但知道這件事很好。謝謝。 –