语法错误,使用 fq(过滤查询)时无法从 lucene StandardQueryparser 解析
Syntax Error, cannot parse from lucene StandardQueryparser when using fq(filtered query)
我正在尝试将 java 字符串传递给 Apache StandardQueryparser 以获取查询节点。
输入 - "fq=section:1"
我只需要 section:1 在 QueryNode 的 FILTER 子句中。这看起来很简单,但它会抛出
INVALID_SYNTAX_CANNOT_PARSE: Syntax Error, cannot parse fq=section:1:
使用a ConstantScoreQuery. It won't affect it score, and is the same was as the fq
parameter is implemented in Solr:
public Weight createWeight(IndexSearcher searcher, ScoreMode scoreMode, float boost) throws IOException {
// SolrRequestInfo reqInfo = SolrRequestInfo.getRequestInfo();
if (!(searcher instanceof SolrIndexSearcher)) {
// delete-by-query won't have SolrIndexSearcher
return new BoostQuery(new ConstantScoreQuery(q), 0).createWeight(searcher, scoreMode, 1f);
}
SolrIndexSearcher solrSearcher = (SolrIndexSearcher)searcher;
DocSet docs = solrSearcher.getDocSet(q);
// reqInfo.addCloseHook(docs); // needed for off-heap refcounting
return new BoostQuery(new SolrConstantScoreQuery(docs.getTopFilter()), 0).createWeight(searcher, scoreMode, 1f);
}
我正在尝试将 java 字符串传递给 Apache StandardQueryparser 以获取查询节点。
输入 - "fq=section:1"
我只需要 section:1 在 QueryNode 的 FILTER 子句中。这看起来很简单,但它会抛出
INVALID_SYNTAX_CANNOT_PARSE: Syntax Error, cannot parse fq=section:1:
使用a ConstantScoreQuery. It won't affect it score, and is the same was as the fq
parameter is implemented in Solr:
public Weight createWeight(IndexSearcher searcher, ScoreMode scoreMode, float boost) throws IOException {
// SolrRequestInfo reqInfo = SolrRequestInfo.getRequestInfo();
if (!(searcher instanceof SolrIndexSearcher)) {
// delete-by-query won't have SolrIndexSearcher
return new BoostQuery(new ConstantScoreQuery(q), 0).createWeight(searcher, scoreMode, 1f);
}
SolrIndexSearcher solrSearcher = (SolrIndexSearcher)searcher;
DocSet docs = solrSearcher.getDocSet(q);
// reqInfo.addCloseHook(docs); // needed for off-heap refcounting
return new BoostQuery(new SolrConstantScoreQuery(docs.getTopFilter()), 0).createWeight(searcher, scoreMode, 1f);
}