В проекте, над которым я работаю, мы взаимодействуем с Solr, используя SolrNet.У нас есть собственный поисковый компонент в solr, который активируется добавлением join=true
к запросу.(Я делаю это в solrnet через ExtraParams
из CommonQueryOptions
).В ответе есть пользовательский <lst name="joinresult">
после обычных результатов, который я хочу проанализировать и вернуть вызывающему.
Теперь я не знаю, где я могу чисто вставить пользовательский ResponseParser в конвейер SolrNet.
Что я сделал до сих пор:
- Создан класс
JoinResult<T>
для хранения моего пользовательского результата - Создан
JoinQueryResults<T> : SolrQueryResult<T>
с IList<JoinResult<T>> JoinResult
свойство. - Создание
IJoinResponseParser<T> : ISolrResponseParser<T>
интерфейса - Создание
JoinResponseParser<T> : IJoinResponseParser<T>
для анализа результата пользовательского списка в свойстве JoinQueryResults.JoinResult
.
Следующий шагзаключался в том, чтобы подключить все эти классы в нужных местах и использовать SolrQueryExecuter<T>.Execute
для выполнения остальной части тяжелой работы.Но это всегда будет возвращать SolrQueryResult, а не мой пользовательский результат.
Кто-нибудь знает, что мне нужно для поддержки моего сценария?
РЕДАКТИРОВАТЬ:
Что у меня такдалеко следующее:
- Получите от
SolrQueryExecuter<T>
и добавьте метод ExecuteJoin(q,options)
, который возвращает JoinQueryResults<T>
.
Это работает, но это не такдействительно чувствую себя "правильно".Мой метод Execute является копией обычного метода Execute только с одним существенным изменением: я заменил new SolrQueryResults
на new JoinQueryResults
.
Читая код SolrNet, я не смог найти какой-либо другой «простой» способ, поэтомуСейчас я придерживаюсь этого подхода.