У меня есть рабочий индекс Lucene, поддерживающий сервис предложений.Когда пользователь вводит в поле поиска, он запрашивает индекс с помощью SUGGESTION_FIELD.Каждая запись в SUGGESTION_FIELD может быть одним из многих поддерживаемых языков, и каждая из них хранится с использованием соответствующего языкового анализатора.Чтобы узнать, какой анализатор использовался, в каждой записи есть второе поле, в котором хранится LOCALE.Поэтому во время запроса я могу сказать что-то вроде приведенного ниже кода, чтобы выполнить запрос для конкретного языка, используя соответствующий анализатор
QueryParser parser = new QueryParser(Version.LUCENE_33, SUGGESTION_FIELD, getLangaugeAnalyzer(locale));
return searcher.search(parser.parse("SUGGESTION_FIELD:" + queryString + " AND LOCALE:"
+ locale), 100);
Работает .... Но теперь клиент хочет иметь возможность поиска с использованием нескольких языков наодин раз.
Мой вопрос: Каким было бы самое быстрое решение для запросов, учитывая, что служба предложений должна быть очень быстрой? ...
Sol.# 1.Казалось бы, самое простое решение;сделать запрос несколько раз.Один раз для каждой локали, тем самым каждый раз применяя соответствующий анализатор языка.Наконец добавьте результаты каждого запроса некоторым разумным способом
Sol.# 2.В качестве альтернативы я мог бы переиндексировать, используя столбец для каждой локали, например:
SUGGESTION_FIELD_en, SUGGESTION_FIELD_fr, SUGGESTION_FIELD_es etc..
, используя разные анализаторы для каждого поля (используя PerFieldAnalyzerWrapper), а затем выполнить запрос, используя более сложную строку запроса, такую как:
"SUGGESTION_FIELD_en:" + queryString + " AND SUGGESTION_FIELD_fr:" + queryString + " AND SUGGESTION_FIELD_es:" + queryString
Пожалуйста, помогите, если вы думаете, что:)