Переменные SphinxQL устарели, альтернативный запрос?

У меня был довольно простой запрос к SphinxQL, но оказалось, что @ переменные устарели (см. Пример ниже).

SELECT *,@weight AS m FROM test1 WHERE MATCH('tennis') ORDER BY m DESC LIMIT 0,1000 OPTION ranker=bm25, max_matches=3000, field_weights=(title=10, content=5);

Я чувствую, что должен быть способ отсортировать результаты по силе матча. Какая замена?

С другой стороны, что если я захочу включить в него девальвацию, если появятся некоторые другие слова. Например, скажем, я хотел обесценить результаты, в которых было слово "одежда". Может ли это быть выполнено в том же запросе?

Спасибо!

1 ответ

Решение

Ну, результаты "по умолчанию" в снижении веса, так что просто...

SELECT * FROM test1 WHERE MATCH('tennis') LIMIT 0,1000 OPTION ... 

Но в противном случае его, просто переменные @, заменяются на "функции", главным образом потому, что он более "похож на SQL". Так что @weight, это WEIGHT()

SELECT * FROM test1 WHERE MATCH('tennis') ORDER BY WEIGHT() DESC ...

или же

SELECT *,WEIGHT() AS m FROM test1 WHERE MATCH('tennis') ORDER BY m DESC ...

Для справки @group вместо GROUPBY()@count - это COUNT(*)@distinct - это COUNT(DISTINCT ...)@geodist это GEODIST(...) и @expr на самом деле не имеет эквивалента, либо просто используйте выражение напрямую, либо используйте свой собственный псевдоним с именем.


Что касается второго вопроса. Хитро, они на самом деле не "отрицательный" вес. Ther является оператором повышения ключевых слов, но пока не может использовать его для конкретной девальвации.

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

... MATCH('@!(negative) tennis @negative apparel') 
... OPTION ranker=expr('SUM(word_count*IF(user_weight=99,-1,1))'), field_weights(negative=99)

Это очень простое демонстрационное выражение для иллюстративных целей, реальное, вероятно, будет гораздо более сложным. Это просто показывает использование 99 в качестве заполнителя для "отрицательного" умножения. Понадобится новый negative создание поля, которое может быть просто дубликатом другого поля

Другие вопросы по тегам