Я выполняю Solr на своей машине окон с помощью причала. Я загрузил Пространственный Плагин 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 " "lng=-2.6257 "" at line 1, column 2
4.
Was expecting:
"}" ...
Теперь, вещь состоит в том, если я использую страницу Solr Web Admin и выполняю следующий запрос против нее, все хорошо работает.
{!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.