Если у вас есть только 1000 предложений, вам, вероятно, не нужен такой мощный индексатор, как lucene. Я не уверен, хотите ли вы сделать предложения «завершить предложение» или «предложить другие запросы, имеющие те же ключевые слова». Вот решения для обоих:
Предполагая, что вы хотите завершить предложение, введенное пользователем, вы можете поместить все свои строки в SortedSet
и использовать метод tailSet
, чтобы получить список строк, которые «больше», чем входная строка (поскольку строковый компаратор считает более длинную строку A
, начинающуюся со строки B
, «большей», чем B
). Затем выполните итерации по нескольким верхним записям набора, возвращаемого tailSet
, чтобы создать набор строк, где первые символы inputString.length()
соответствуют входной строке. Вы можете прекратить итерацию, как только первые inputString.length()
символы не соответствуют входной строке.
Если вы хотите делать предложения по ключевым словам вместо предложений «завершить предложение», тогда накладные расходы зависят от того, как долго ваши предложения и сколько уникальных слов содержится в предложениях. Если этот набор достаточно мал, вы сможете использовать HashMap<String,Set<String>>
, где вы сопоставили ключевые слова с предложениями, которые их содержали. Тогда вы могли бы обрабатывать запросы из нескольких слов, пересекая множества.
В обоих случаях я, вероятно, сначала преобразовал бы все строки в нижний регистр (при условии, что это подходит для вашего приложения). Я не думаю, что какое-либо из этих решений может привести к сотням тысяч предложений. Делай что-нибудь из того, что хочешь? Рад предоставить код, если хотите.