Сфинкс и запрос ранжированных результатов сначала по И, а затем по комбинации ИЛИ - PullRequest
0 голосов
/ 26 сентября 2018

Я думал, что это довольно распространенный случай, но просто не могу понять и найти какую-либо информацию о нем.

Скажите, что у меня есть следующие тексты:

  • Собаки ненавидят кошек
  • Моя кошка ест мышей, но ненавидит собак
  • Мыши ненавидят кошек, но не заботятся о собаках
  • Жирафы не заботятся ни о каких кошках
  • Собакихрабрый в большинстве случаев

Я не могу понять запрос, который возвращает тексты в следующем порядке:

1) Сначала все тексты, которые содержат ВСЕ три «собака», «кошка»и 'mice',

2) Затем все тексты, которые содержат каждую пару ('dog', 'cat'), ('dog', 'mice'), ('cat', 'mice')в произвольном порядке

3) Тогда все тексты, содержащие какие-либо слова «собака», «кошка» или «мышь»

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

  • Мой кот ест мышей, но ненавидит собак
  • Мыши ненавидят кошек, но не заботятся о собаках
  • Собаки ненавидят кошек
  • Жирафы не заботятся ни о каких кошках
  • В большинстве случаев собаки смелые

Может кто-нибудь помочь мне, пожалуйста?

1 Ответ

0 голосов
/ 26 сентября 2018

Ну, в общем, есть две части: соответствие и ранжирование.

Для соответствия вы просто хотите документы, которые содержат хотя бы одно из слов (т.е. примут документ с одним из них).Оператор кворума, вероятно, является самым простым способом сделать это, но несколько других методов также будут работать.

... MATCH(' "dog cat mice"/1 ') 

Затем вы хотите, чтобы те, у кого больше всего слов (3), показывались первыми - это примерно рейтинг http://sphinxsearch.com/docs/current.html#ranking-overview

в целом можетхорошо, найдите, что WordCount Ranker подходит для вашей ситуации

... OPTION ranker=wordcount

Но прочитайте приведенный выше раздел о ранжировании, здесь гораздо более сложное ранжирование.

При ранжировании вам нужно подумать о том, как sphinx вычисляет оценку для каждого результата , а затем просто упорядочивает результаты в порядке убывания веса.(в отличие от ' this, затем that, затем '.)


Изменить, чтобы добавить: вы упоминаете dog как термин запроса, но есть документы, содержащие dogs так что убедитесь, что посмотрите на морфологию и основу для объяснения этого.http://sphinxsearch.com/docs/current.html#conf-morphology

...