Как добавить Spatial Solr в запрос Solrnet
Вопрос
Я бегаю Solr на моем Windows Machine с помощью пристани. Я скачал Плагин Spatial Solr. Что мне наконец удалось встать и бежать. Я также использую SolRNET, чтобы запросить против Solr от моего проекта ASP.NET MVC.
Теперь добавление данных в мой индекс, кажется, работает нормально, а SpatialtierupdateProcessorfactory также работает.
Проблема в:
Как добавить пространственный запрос в мой обычный запрос, используя библиотеку Solrnet. Я пытался добавить его с помощью параметра «ExtraParams», но это не очень хорошо работало.
Вот пример меня, пытающийся объединить пространственный запрос с помощью запроса диапазона данных. Запрос диапазона даты работает нормально без прикрепленного к нему пространственного запроса:
new SolrQuery("{!spatial lat=51.5224 long=-2.6257 radius=10000 unit=km calc=arc threadCount=2}") && new SolrQuery(MyCustomQuery.Query) && new SolrQuery(DateRangeQuery);
который приводит к следующему запросу против SOLR:
(({!spatial lat=51.5224 long=-2.6257 radius=100 unit=km calc=arc threadCount=2} AND *:*) AND _date:[2010-05-07T13:13:37Z TO 2011-05-07T13:13:37Z])
И сообщение об ошибке, которое я вернуюсь:
Удаленный сервер вернул ошибку: (400) плохой запрос.
SEVERE: org.apache.solr.common.SolrException: org.apache.lucene.queryParser.Pars
eException: Cannot parse '(({!spatial lat=51.5224 lng=-2.6257 radius=10000 unit=
km calc=arc threadCount=2} AND *:*) AND _date:[2010-05-07T13:09:49Z TO 2011-05-0
7T13:09:49Z])': Encountered " <RANGEEX_GOOP> "lng=-2.6257 "" at line 1, column 2
4.
Was expecting:
"}" ...
Теперь дело в том, что если я использую страницу веб-администратора Solr и выполните следующий запрос против него, все работает нормально.
{!spatial lat=50.8371 long=4.35536 radius=100 calc=arc unit=km threadcount=2}text:London
Какой лучший / правильный способ вызвать пространственную функцию с помощью SolRnet. Лучший способ каким-то образом добавить этот бит запроса вручную в строку запроса и так как?
Решение
Использовать LocalParams
класс для представления LocalParams в Solr.:
solr.Query(new LocalParams {
{"type", "spatial"},
{"lat", "-51.5224"},
{"long", "-2.6257"},
{"radius", "10000"},
{"unit", "km"},
{"calc", "arc"},
{"threadCount", "2"},
} + Query.Field("text").Is("London"));
Это доступно как Solrnet 0,3,0b1.