Если вы не можете денормализовать, как это предлагает Паскаль, вы можете написать свой собственный обработчик запросов для объединения: сначала выполните запрос по запрошенным темам, который запрашивает поле идентификатора соответствующих документов, а затем выполните BooleanQuery, содержащий одно предложение. для каждого идентификатора (TermQuery для subject = id). Это будет иметь довольно низкую производительность, если есть большое количество идентификаторов, но должно быть хорошо, если есть только несколько совпадающих идентификаторов.
Если вы ожидаете, что ваши запросы на присоединение, как правило, будут соответствовать многим (скажем, сотням) темам, то вам, вероятно, лучше не денормализовать, как это предлагается.
Я не знаю самый элегантный способ выдачи запроса из обработчика, но FWIW, вот как я это делаю.
Map args = new HashMap();
// add your query parameters to the map, like fields to return
args.put("fl", new String[]{"id"});
final SolrIndexSearcher searcher = req.getSearcher();
String query = "your query"
LocalSolrQueryRequest newReq = new LocalSolrQueryRequest(core, query, "", 0, 0, args) {
@Override public SolrIndexSearcher getSearcher() { return searcher; }
@Override public void close() { }
};
SolrQueryResponse newRsp = new SolrQueryResponse();
core.execute(core.getRequestHandler(newReq.getParams().get(CommonParams.QT)), newReq, newRsp);
// query results will be in newRsp