#solr
#solr
Вопрос:
Я использую Solr 5.4 (на сервере Ubuntu) и индексирую из MySQL. Он отлично работает для поиска и фасетирования, но теперь я хочу реализовать геопространственную фильтрацию. В пользовательском интерфейсе администратора я запускаю,
http://mysite:8983/solr/core/select?q=*:*amp;wt=jsonamp;indent=trueamp;defType=edismaxamp;spatial=trueamp;pt=44.8859987,-93.0833396amp;sfield=org_locamp;d=50
Схема:
<field name="org_loc" type="location" indexed="true" stored="true"/>
<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
Ответ:
{
"responseHeader":{
"status":0,
"QTime":13,
"params":{
"lowercaseOperators":"true",
"d":"50",
"spatial":"true",
"indent":"true",
"q":"*:*",
"sfield":"org_loc",
"pt":"44.8859987,-93.0833396",
"stopwords":"true",
"wt":"json",
"defType":"edismax"}},
"response":{"numFound":21,"start":0,"docs":[
"org_name": "..."
"org_loc":"44.8259987,-93.0813396",
...etc.
Проблема в том, что он возвращает 21 из 21 записей каждый раз, независимо от d.
Комментарии:
1. может быть, у вас есть только 21 запись с этим критерием соответствия? вы проверяли другие входные данные?
2. В базе данных всего 21 запись с поддельными данными для тестирования. Он возвращает все 21 запись независимо от pt или d.
3. d — радиальное расстояние, обычно в километрах, пожалуйста, увеличьте это значение до 100 и проверьте один раз
4. тогда нет проблем, верно?
5. Я сказал, независимо от d. Я пробовал 5, 50, 500, 5000. Он возвращает 21 запись каждый раз, независимо от того, попадают ли возвращаемые записи внутрь или за пределы радиуса.
Ответ №1:
geofilt
должно быть требуется явно с использованием fq
параметра, эта часть запроса отсутствует :
amp;fq={!geofilt}
Комментарии:
1. Это работает! Я пробовал geofilt много раз раньше, даже вставляя эту строку прямо из руководства: amp;q=*:*amp;fq={!geofilt sfield=org_loc}amp;pt= 44.8859987,-93.0833396amp;d = 50, но это не работает. Как ни странно, это работает, когда я ввожу {!geofilt} в параметр fq пользовательского интерфейса администратора, который генерирует следующее: amp;fq={!geofilt}amp;spatial=trueamp;pt= 44.8659987,-93.0823396amp;sfield=org_locamp;d = 500 (плюс другие соответствующие параметры). Спасибо, что указали мне правильное направление!