我正在写一个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中使用自定义标记器。 –