我正在寻找一种方法来修改Lucene Query的字段名称,使用从字段名称到编码字段名称的已知映射。
例如,如果我有一个查询 title:System ,我需要将它转换为查询 a200:System (我知道从字段编码映射标题的映射 - > A200)
我可以编写一个函数来转换查询,但我想知道是否有一种简单的方法可以做到这一点。 该功能将是这样的: public Query rewriteWithEncodedFields(查询查询,地图编码){...}
如果在其中一个QueryParsers中有一个选项,那也很好,但我还没有找到任何东西。
答案 0 :(得分: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...
}
}