Я работаю над веб-приложением Java (Spring 3.x), которое использует SOLR для своей поисковой системы.Я хочу иметь возможность перехватить запрос Lucene и заменить «виртуальное» поле поиска одним из двух проиндексированных полей на основе службы поиска (в случае успеха используйте поиск по диапазону, в противном случае ищите обычное поле).
Например, учитывая запрос типа field0:foo (field1:bar OR field1:bash) AND field2:bing
(field1 является виртуальным полем)
манипулируйте запросом, чтобы получить field0:foo (field3:[42 TO 45] OR field4:bash) AND field2:bing
Так что после игры с идеей просто использовать reg ex,Я решил посмотреть на классы Lucene, чтобы посмотреть, смогу ли я повторно использовать существующий код.Я хотел бы иметь возможность получить разобранную версию запроса, чтобы перебирать предложения и искать определенные поля для манипуляции.Затем заново сгенерируйте строку запроса и передайте ее в SOLR.
Я подошел близко, используя QueryParser от Lucene, но я могу получить только термины, а не логические операторы:
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
QueryParser queryParser = new QueryParser(Version.LUCENE_30, "text", analyzer);
try {
Query query = queryParser.parse(queryString);
Set<Term> terms = new TreeSet<Term>();
query.extractTerms(terms);
for (Term t : terms) {
logger.info("Term - field:" + t.field() + " | text:" + t.text());
}
} catch (ParseException ex) {
logger.warn(ex.getMessage(), ex);
}
Я посмотрел на BooleanQuery , но мне тоже не повезло.Пожалуйста, помогите.