【问题标题】:Modifying field names in Lucene Query修改 Lucene Query 中的字段名称
【发布时间】:2013-08-14 05:55:57
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: lucene


    【解决方案1】:

    据我所知,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...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 2011-01-21
      • 2014-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多