【问题标题】:Library to search unstructured text on Android在 Android 上搜索非结构化文本的库
【发布时间】:2011-08-19 17:31:51
【问题描述】:

我正在编写一个需要快速搜索大量文本的 Android 应用。文本是固定的;我想离线计算索引并将它们与应用程序一起发布。以下是搜索库的要求(数字 1-5 很关键):

  1. 必须支持 Unicode 字符集。
  2. 搜索需要在文本中找到任意子字符串(不仅仅是术语或术语前缀)。
  3. 搜索需要返回所有匹配项。
  4. 库应尽可能轻量级。特别是,应该可以剥离库的索引(和其他)部分,并仅使用搜索 API 打包应用程序。
  5. 图书馆许可必须允许将其用于专有的组合作品中。
  6. 无需进行形态分析(词干)或停用词处理。
  7. 通配符和/或正则表达式搜索会很好,但不是必需的。
  8. 邻近搜索也不错。
  9. 类似的布尔搜索。

FTS3(SQLite 附带)在要求 4 方面非常出色,但遗憾的是不能满足要求 2。(它可以找到术语前缀但不能找到后缀——搜索“eat”可以找到“eats”但不能找到“座位”。)

我查看了许多库,包括 Lucene、Minion 和 egothor。它们似乎都加载了我不需要的强大功能。我也有这样的印象(尽管这可能是错误的),很难对这些库进行分区并打包搜索 API。 (我还听说 Lucene 很难在 Android 上运行,因为它依赖 java.rmi,而 Android 的 Java 不包含该文件。)

有没有人知道一个库可以满足我的需要(或可以适应)?如果库满足要求,我不反对将搜索 API 从另一种语言移植到 Java。

【问题讨论】:

  • 也许 SQLite FTS3 的自定义标记器对您有用?
  • @JuozasKontvainis - 我首先看了一下。有两个问题。首先,自定义标记器只能用于更改被视为标记的内容;它不能改变 FTS3 的基本操作。根据我的阅读,没有任何形式的标记化可以解决基于标记的索引的基本限制:它可以用于查找标记前缀,但不能用于查找后缀。其次,我不知道在 Android 的 SQLite 版本中是否可以使用自定义标记器。

标签: android full-text-search


【解决方案1】:

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

【讨论】:

  • 这很有趣,但我不知道这是朝着我当前项目正确方向迈出的一步。据我所知,Lucy 包含了 Lucene 的所有功能,包括所有索引构建基础设施。仅仅因为它是在 C 而不是 Java 中,所以将这些东西剥离出来似乎并不容易。此外,Java 比 C(需要使用 NDK)更适合 Android 应用程序。但很高兴知道它。谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 2011-08-18
  • 2016-04-05
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多