我想要一个简单的功能,即将整个用户查询与索引数据匹配,并仅返回完全匹配。我知道我们可以用双引号给出查询。但是由于这个实用程序将在我们的应用程序中广泛使用,我设计了一个自定义解析器组件,它将为用户输入的查询创建一个短语查询(就像在双引号内给出查询时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;
}
有任何建议吗???
答案 0 :(得分:0)
为什么要编写自定义实现?
在调用之前扩展QueryParserHelper
类并修改查询应该对您有用,因为它会创建一个短语查询。
原型 -
@Override
public Query parse(String query, String defaultField)
throws QueryNodeException {
String modifiedQuery = "\""+query.toLowerCase()+"\"";
return (Query) super.parse(modifiedQuery, defaultField);
}