Я хотел бы реализовать полнотекстовый поиск в своем автономном (андроидном) приложении для поиска списков заметок, созданных пользователем.
Я бы хотел, чтобы он вел себя так же, как Google (так как большинство людей уже привыкли обращаться к Google)
Мои первоначальные требования:
- Быстро: как Google или как можно быстрее, имея 100000 документов по 200 ста слов.
- Поиск двух слов должен только возвращать документы, содержащие оба слова (не только одно слово) (если не используется оператор OR)
- Нечувствительность к регистру (ака: нормализация): Если у меня есть слово "Hello", и я ищу "привет", он должен совпадать.
- Диакритическая метка нечувствительна: если у меня есть слово "as", поиск "asi" должен совпадать. На испанском языке многие люди, неверно, либо не ставят диакритические знаки, либо не могут правильно их поместить.
- Прекратить удаление слова: не иметь большого индекса бессмысленных слов типа 'и', '' или 'для' не следует индексировать вообще.
- Подстановка словаря (aka: stem words): Подобные слова должны быть проиндексированы как один. Например, примеры "голодных" и "голодных" должны быть заменены "голодом".
- Поиск фразы: если у меня есть текст "Привет, мир!" поиск "world hello" не должен совпадать, но поиск "мира привет" должен соответствовать.
- Искать все поля (в многоуровневых документах), если не указано поле (а не только поле по умолчанию)
- Автозаполнение в результатах поиска при наборе текста, чтобы обеспечить популярные поисковые запросы. (так же, как Google Suggest)
Как настроить полнотекстовый поисковый движок как можно больше, как Google?
(меня больше всего интересуют Open Source, Java и, в частности, Lucene)