我正在尝试创建一个edismax查询并设置查询参数,如defType,df,q.op ...等。我能够创建一个布尔查询,但不能设置查询参数。任何想法如何?
private List<String> getBoostedElevationObj(ResponseBuilder rb) {
SolrQueryRequest req = rb.req;
Query query = rb.getQuery();
List<String> docIds = null;
try {
BooleanQuery docIdsBq = new BooleanQuery();
TermQuery tq2 = new TermQuery(new Term("subscription", "yes"));
docIdsBq.add(tq2, BooleanClause.Occur.MUST);
SolrIndexSearcher solrIndexSearcher = req.getSearcher();
DocList docList = solrIndexSearcher.getDocList(query, docIdsBq, null,
0, 5);
DocIterator docIterator = docList.iterator();
docIds = new ArrayList<String>();
int docId;
Document doc = null;
while (docIterator.hasNext()) {
docId = docIterator.nextDoc();
doc = solrIndexSearcher.doc(docId);
docIds.add(doc.get(idField));
}
} catch (Exception e) {
e.printStackTrace();
}
return docIds;
}
答案 0 :(得分:1)
由于这些是查询解析器参数,并且您在这些手动构造的查询中消除了查询解析器,因此部分功能的责任落在您身上。
NumericRangeQuery
是合适的,等等。BooleanQuery
时,您还必须指定BooleanClause.Occur
设置,因此没有默认运算符。其他一些常见的参数:
Sort
getDocList
调用,第三个参数
getDocList
IndexSearcher.doc
来电。此外,您应该记住,edismax通常会生成一个DisjunctionMaxQuery来连接子句,而不是一个BooleanQuery,并且它们的得分和构造方式存在显着差异。在你创建的BooleanQuery的情况下,这不是问题,因为:A - 它只有一个子句,而B - 它被用作过滤器。但是,如果您在此处考虑其他可能存在问题的案例,则可能值得记住。