Solr geofilt возвращает все результаты

#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 (плюс другие соответствующие параметры). Спасибо, что указали мне правильное направление!