3
我正在使用SOLR作为其搜索引擎的Java webapp(Spring 3.x)。我希望能够拦截Lucene查询,并根据查找服务(如果成功使用范围搜索,则搜索常规字段)将两个索引字段中的任一个替换为“虚拟”搜索字段。在执行搜索之前操作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前的想法玩弄后,我决定看看Lucene类,看我是否可以重新使用现有的代码。我希望能够获得查询的解析版本,以遍历子句,寻找特定的字段进行操作。然后重新生成查询字符串并将其传递给SOLR。
我有密切的使用Lucene的QueryParser但我只能得到的条款,而不是布尔运算符:
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,但还没有运气有两种。请帮忙。
为什么要扩展MultiFieldQueryParser VS的QueryParser?他们都实现了一个getFieldQuery()方法... – nickdos
@nickdos:我个人使用'MultiFieldQueryParser',这就是我所说的。如果这是你喜欢的,你当然可以使用普通的。 – Xodarap
感谢Xodarap,我一开始并不确定你的回答(不知道Lucene如何调用getFieldQuery())。但给了它一下,它完美的工作。 – nickdos