【问题标题】:Solr Custom parser issueSolr 自定义解析器问题
【发布时间】:2011-11-16 02:15:40
【问题描述】:

我想要一个简单的功能,将整个用户查询与索引数据相匹配,并且只返回完全匹配的内容。我知道我们可以在双引号内给出查询。但由于该实用程序将在我们的应用程序中广泛使用,因此我设计了一个自定义解析器组件,该组件将为用户输入的查询创建一个短语查询(就像 solr 在双引号内给出查询时所做的那样)。

但在这种情况下,我无法获得任何匹配的文档。

代码是:

public Query parse() throws ParseException {

    PhraseQuery pq = new PhraseQuery();
    String qf = params.get("qf",getReq().getSchema().getDefaultSearchFieldName());
    String query = getString();

    if(query == null){
        return pq;      
    }
    String[] queryTerms = query.split("[ ?<>,/?\\()*!@#$%^&_+=|{}'`~;:\"-.]");
    for(String queryTerm : queryTerms){
        pq.add(new Term(qf,queryTerm.toLowerCase()));   
    }

    return pq;
}

有什么建议吗???

【问题讨论】:

    标签: solr


    【解决方案1】:

    为什么要编写自定义实现?
    扩展 QueryParserHelper 类并在调用之前修改查询应该适合您,因为它会创建一个短语查询。

    原型 -

    @Override
    public Query parse(String query, String defaultField)
        throws QueryNodeException {
      String modifiedQuery = "\""+query.toLowerCase()+"\"";
      return (Query) super.parse(modifiedQuery, defaultField);
    
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 2014-03-27
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    相关资源
    最近更新 更多