2013-10-08 1 views
1

Выполнение поиска Bbox с единственным местоположением возвращает точные данные; но если добавить больше параметров поиска, возвращаемое расстояние оценка получает wrong-Solr - Как отсортировать геопространственное расстояние и вернуть расстояние?

Для EG-

случае 1:

http://devtsg.truckertools.com/solr-4.4.0/collection1/select?wt=json&rows=1&fl=*,score&sort=score asc&q={!bbox score=distance sfield=geo pt=33.3232,-83.383 d=150}

-это возвращает правильное расстояние для магазина- «оценка»: 0.02656421

дело 2:

Но если добавить еще одну проверку, с Bbox, он возвращает неправильный Дистанционно- счет

http://devtsg.truckertools.com/solr-4.4.0/collection1/select?wt=json&rows=1&fl=*,score&sort=score asc&q=({!bbox score=distance sfield=geo pt=33.3232,-83.383 d=150} AND :)

-The выше один возвращает "счет": 0.7258905, что это неправильно. Он должен быть таким же, как и выше.

случай 3:

Просто чтобы убедиться, добавили проверку с идентификатором в магазин-

http://devtsg.truckertools.com/solr-4.4.0/collection1/select?wt=json&rows=1&fl=*,score&sort=score asc&q=({!bbox score=distance sfield=geo pt=33.3232,-83.383 d=150} AND id:9220)

-Теперь это один и возвращает неправильный distance- «счет ": 9.05333

Не понимаю, что здесь происходит. Спасибо заранее.

ответ

1

Поместите каждую часть запроса AND в запрос Solr filter ('fq' param) и оставьте «q» для релевантности поиска по ключевым словам. В вашем полевом списке ('fl' param) вы можете поместить запрос функции, чтобы вернуть расстояние: fl=*,dist:geodist(). Требуются другие параметры, такие как «pt» и «sfield». Для сортировки используйте sort=geodist() asc.

Однако вы не можете использовать функциональный запрос geodist() с пространственным полем «RPT» в версиях Solr до версии 4.1. Я вижу, что вы используете 4.4. Если вам нужно сортировать поле RPT (требуется только в том случае, если у вас есть несколько местоположений) в Solr 4.2 до 4.4, вам нужно подойти по-другому, и ваша попытка будет близка. Я предлагаю всегда использовать параметры «q» и «fq», как вы обычно должны их использовать (ключевое слово и фильтры, соответственно). Рассмотрим этот вывод echoParams моего запроса на Solr:

"indent":"true",  
    "wt":"json", 
    "sort":"query({!bbox v='' filter=false score=distance}) asc", 
    "fl":"*,score,dist:query({!bbox v='' filter=false score=distance})", 
    "sfield":"geo", 
    "pt":"33.3232,-83.383", 
    "d":"150", 
    "q":"*:*", 
    "fq":"{!bbox}", 
    "fq":"id:9220" 

Да, это уродливо. Опять же, с Solr 4.5 вам больше не нужно прибегать к этому.

Кстати, поведение, которое вы видите, на самом деле не является ошибкой. Вам нужно составить свой запрос по-разному, чтобы получить нужные результаты.

Смежные вопросы