2014-02-01 2 views
0

Я пытаюсь достичь двух целей с помощью одного запроса Sphinx: получить результаты, соответствующие любому слову запроса, и иметь точное соответствие на первом месте. Например, если у меня была песня базы данных запроса на поиск:Sphinx точное/частичное совпадение и рейтинг

  1. Miley Cyrus Бал
  2. Miley Cyrus Разрушения
  3. Майли Сайрус

И два тестовых запросов:

  1. Miley Cyrus
  2. Miley Cyrus Wrecking Ball

Если я ищу «Miley Cyrus», я хочу получить строку №3, и если я ищу «Miley Cyrus Wrecking Ball», я хочу получить № 1 или № 2. Я пробовал различную комбинацию режимов сопоставления и ранжирования, но до сих пор не могу заставить это работать с единственным запросом. Когда я пытаюсь выполнить SPH_MATCH_EXTENDED2 и SPH_RANK_SPH04, мой первый тестовый запрос работает нормально, возвращая результат №3 на первом месте, но второй тестовый запрос не возвращает никаких результатов. Когда я пытаюсь выполнить SPH_MATCH_ANY, я получаю частично согласованные результаты для второго тестового запроса (# 2 имеет немного более высокий вес, который кажется правильным), но первый запрос возвращает 3 строки с одинаковым весом, а # 1 сверху сверху из-за порядка в БД , Единственным обходным решением, которое у меня есть сейчас, является создание двух запросов: одно для точного соответствия и другое для частичного совпадения, если первый из них не удался.

Также из этого article Я вижу, что все режимы соответствия, кроме SPH_MATCH_EXTENDED2, являются устаревшими, поэтому что я должен использовать для частичного совпадения, как в примере выше, когда они удаляются?

ответ

2

тд, д-р Существует только один Matching режим - Extended. Не используйте. Если вы хотите изменить, какие документы включены, измените сам запрос (например, с оператором кворума). Затем можно выбрать, как документы упорядочиваются, используя Рейтинг режим.

Первое, что нужно знать, состоит в том, что сопоставление и ранжирование - это две разные темы.

  • Matching является то, что документы даже представляют результаты, т.е. сравнивая запрос и сказать: да/нет на вопрос «не этот документ соответствует запросу?»

  • Оценка - вычисление веса, поэтому лучшие совпадения могут подниматься вверх, сортируя по весу.

исторически соответствия и ранжирования, где объединены в одно понятие, вы выбираете режим соответствия дэ (который выбрал как был inpreted запрос) и расчет соответствующий рейтинг был выбран автоматически.

Это осознанное, что оно недостаточно гибкое, поэтому, когда оно разделено. Но многие люди использовали старое поведение, поэтому старые режимы согласования (любая/фраза и т. Д.), Где поддерживается по соображениям совместимости.

Внутренне есть только ОДИН режим согласования - расширенный. Более старые режимы соответствия устаревшим образом автоматически переписывают запрос по мере необходимости (меняют его на расширенный синтаксис запроса) и выбирают определенный режим ранжирования.

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


Я объяснил все предыстория, чтобы показать вам, что если предлагаемые режимы, соответствующие не достаточно хорошо, вы можете сделать то же самое. т.е.

  • Вы должны выбрать конкретный режим ранжирования (или даже полностью настраиваемой один через рейтинговом выражение)

  • И вы также, возможно, потребуется изменить сам запрос, чтобы изменить поведение соответствия. (Помните, выбирая MATCH_ANY, изменяет запрос и выбирает режим ранжирования.)

Так можно переписать запрос, чтобы использовать кворум, например

"Miley Cyrus Wrecking Ball"/2 

Запоминание сохранить режим расширенного соответствия. Затем можно выбрать режим ранжирования independatly (setRankingMode) - например, теперь можно использовать SPH_RANK_SPH04, но вы сделать получить нечеткую 'соответствия поведения (как бы с матчем любого)

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

+0

Спасибо за большой и подробный ответ, я должен был читать документы лучше, не знал много о расширенном синтаксисе запроса, оператор кворума сделал трюк. – yefrem

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