在执行搜索之前操作 Lucene 查询

2024-01-15

我正在开发一个 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(使用前将#替换为@)

在执行搜索之前操作 Lucene 查询 的相关文章

随机推荐