修改Lucene Query中的字段名称

时间:2013-08-13 20:57:24

标签: lucene

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

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

我可以编写一个函数来转换查询,但我想知道是否有一种简单的方法可以做到这一点。 该功能将是这样的: public Query rewriteWithEncodedFields(查询查询,地图编码){...}

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

1 个答案:

答案 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...
    }
}
相关问题