我正在开发一个 Java Web 应用程序(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。
我已经接近使用 Lucene 了查询解析器 http://lucene.apache.org/java/3_0_1/api/core/org/apache/lucene/queryParser/QueryParser.html但我只能获取术语而不能获取布尔运算符:
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);
}
我看过布尔查询 http://lucene.apache.org/java/3_0_1/api/core/org/apache/lucene/search/BooleanQuery.html但那里也没有运气。请帮忙。
制作您自己的查询解析器:
class MyParser : MultiFieldQueryParser {
@override
public Query getFieldQuery(string field, string queryText) {
if lookupSuccessful(field, queryText) {
return myQuery(field, queryText);
}
return base.getFieldQuery(field, queryText);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)