Как обнаружить введенный поисковый запрос как объемный запрос или как обычный запрос библиотеки ядра lucene
Есть ли способ узнать, предназначен ли запрос для обычной библиотеки ядра lucene или для модуля объемного вклада. Можем ли мы объединить объемный запросный парсер с запросным парсером базовой библиотеки lucene, чтобы у нас был только один запросный синтаксический анализатор, который определяет синтаксис как объемный запрос или обычный запрос lucene.
1 ответ
Я на самом деле не так уж много знаю о парсере запросов Surround, но я вполне уверен, что и окружение, и парсер запросов по умолчанию обрабатывают один и тот же синтаксис, поэтому вы не можете строго различать для всех случаев. Я бы подумал, вместо того, чтобы пытаться определить синтаксис и передать его парсеру соответственно, вместо этого выбрать, какой парсер следует использовать по умолчанию, и переключиться на другой в случае сбоя.
Что-то вроде:
//Assuming you have a lucene default QueryParser and IndexSearcher lying around.
try {
query = org.apache.lucene.queryparser.surround.parser.QueryParser.parse(queryString);
} catch (ParseException pe) {
query = defaultParser.parse(queryString);
}
searcher.search(query, numHits);
Вы можете, конечно, инкапсулировать это в своей собственной реализации QueryParser, если хотите. Просто реализуйте синтаксический анализ (String) с этой логикой.