2011-11-15 69 views
0

我想简单地将整个用户查询与索引数据匹配并仅返回完全匹配的功能。我知道我们可以在双引号内提供查询。但是由于该实用程序将在我们的应用程序中被广泛使用,我设计了一个自定义分析器组件,它将为用户输入的查询创建一个词组查询(就像solr在双引号内部查询时所做的那样)。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("[ ?<>,/?\\()*[email protected]#$%^&_+=|{}'`~;:\"-.]"); 
    for(String queryTerm : queryTerms){ 
     pq.add(new Term(qf,queryTerm.toLowerCase())); 
    } 

    return pq; 
} 

任何建议,请???

回答

0

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

原型 -

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

} 
+0

很好的解决方案!谢谢 – sriram

+0

我已经尝试过,但我的自定义方法没有得到调用,请你让我知道为什么这不叫。我也问过同样的问题http://stackoverflow.com/questions/18431700/queryparserhelper-sub-类别不叫.please看看 – user1047873