Сортировка Apache Solr на основе значений оценки и поля - PullRequest
0 голосов
/ 03 июля 2019

Я использовал следующий запрос

http://localhost:8983/solr/test6/select?q=*:*&sort=product(score,hits)%20desc

, чтобы отсортировать результаты на основе их оценки релевантности, определенной Apache Solr, умноженной на поле, называемое попаданиями (целыми числами).

Однако я получаю следующее сообщение об ошибке:

{   "responseHeader":{
    "status":400,
    "QTime":0,
    "params":{
      "q":"*:*",
      "sort":"product(score,hits) desc"}},   "error":{
    "metadata":[
      "error-class","org.apache.solr.common.SolrException",
      "root-error-class","org.apache.solr.common.SolrException"],
    "msg":"sort param could not be parsed as a query, and is not a field that exists in the index: product(score,hits)",
    "code":400}}

Почему сортировка не может правильно ввести значение функции, когда:

http://localhost:8983/solr/test6/select?q=*:*&sort=score%20desc

http://localhost:8983/solr/test6/select?q=*:*&sort=hits%20desc

работает, когда функция не применяется?

ПРИМЕЧАНИЕ : http://localhost:8983/solr/test6/select?q=*:*&sort=product(hits,2)%20desc, где я добавил функцию product (), также возвращает то же сообщение об ошибке.

1 Ответ

1 голос
/ 03 июля 2019

Значение score на самом деле не поле, поэтому вы не можете использовать функцию для манипулирования им в предложении сортировки.

Вместо этого вы можете использовать мультипликативное усиление через boost (если вы используете edismax) для достижения того, что вы хотите: &boost=hits. Возможно, вы захотите использовать log(hits) или что-то подобное (например, recip), чтобы избежать больших различий в баллах только для небольших изменений в количестве попаданий.

...