Я пишу приложение для Android, в котором мне нужно быстро найти большой объем текста. Текст исправлен; Я хотел бы вычислить индексы в автономном режиме и отправить их вместе с приложением. Вот требования к поисковой библиотеке (цифры 1-5 являются критическими):
- Должен поддерживать набор символов Unicode.
- При поиске необходимо найти произвольные подстроки в тексте (а не только термины или префиксы терминов).
- Поиск должен вернуть все совпадения.
- Библиотека должна быть максимально легкой. В частности, должна быть возможность удалить индексирующие (и другие) части библиотеки и упаковать приложение только с API поиска.
- Лицензия библиотеки должна позволять использовать ее в проприетарной совместной работе.
- Нет необходимости в морфологическом анализе (stemming) или обработке стоп-слов.
- Поиск по шаблону и / или регулярному выражению был бы полезен, но не обязателен.
- Поиск по близости также был бы хорош.
- Аналогично логическому поиску.
FTS3 (который поставляется с SQLite) хорош в отношении требования 4, но, к сожалению, не удовлетворяет требованию 2. (Он может найти префиксы терминов, но не суффиксы & mdash; поиск «eat» может найти «eat», но "место".)
Я просмотрел несколько библиотек, в том числе Lucene, Minion и egothor. Кажется, все они загружены замечательными функциями, которые мне не нужны. У меня также сложилось впечатление (хотя это может быть и неправильно), что было бы сложно разделить эти библиотеки и просто упаковать API поиска. (Я также слышал, что заставить Lucene работать на Android сложно, потому что он опирается на java.rmi, который отсутствует в Java для Android.)
Кто-нибудь знает библиотеку, которая делает то, что мне нужно (или может быть адаптирована)? Я не против портировать API поиска с другого языка на Java, если библиотека в противном случае отвечает требованиям.