0

我正在寻找一种方法来修改 Lucene Query的字段名称,使用从字段名称到编码字段名称的已知映射。

例如,如果我有一个查询title:System,我需要将其转换为查询a200:System(我知道从字段编码映射 title->a200 的映射)

我可以编写一个函数来转换查询,但我想知道是否有一种简单的方法可以做到这一点。该函数类似于: public Query rewriteWithEncodedFields(Query query, Map encodings) { ... }

如果在其中一个 QueryParsers 中有一个选项,那也很好,但我还没有找到任何东西。

4

1 回答 1

0

据我所知,Solr 提供了这种功能,但 Lucene 本身没有。

您可以按照您的指示转换查询字符串,也可以创建自定义查询解析器。

闲逛,我看到的实现是,如果你使用标准QueryParser作为基础,覆盖:

  • getFieldQuery
  • getFuzzyQuery
  • getPrefixQuery
  • getRangeQuery
  • getRegexpQuery
  • getWildcardQuery

就像是:

public class CustomQueryParser extends QueryParser {
    protected Query getFieldQuery(String field, String queryText, int slop) {
          return super.getFieldQuery(replaceAlias(field), queryText, slop);
    }

    protected Query getFuzzyQuery(String field, String termStr, float minSimilarity) throws ParseException {
          return super.getFuzzyQuery(replaceAlias(field), termStr, minSimilarity);
    }

    //etc.

    private String replaceAlias(String field) {
          //transform as appropriate...
    }
}
于 2013-08-13T21:55:57.357 回答