MySQL Полнотекстовый поиск

Я экспериментировал с полнотекстовым поиском в последнее время, и мне интересно узнать значение значения Score. Например, у меня есть следующий запрос:

SELECT table. * ,
MATCH (
col1, col2, col3
)
AGAINST (
'+(Term1) +(Term1)'
) AS Score
FROM table
WHERE MATCH (
col1, col2, col3
) 
AGAINST (
'+(Term1) +(Term1)'
)

В результатах для Score я видел результаты для одного запроса между 0.4667041301727 и 11.166275978088. Я понимаю, что идея MySQLs релевантности (чем выше, тем больше веса).

То, что я не понимаю, - это то, как MySQL подходит к этой оценке. Почему число не возвращается как десятичное или что-то еще?

Почему, если я запускаю запрос "В РЕЖИМЕ BOOLEAN", всегда ли счет возвращается 1 или 0? Не все ли результаты будут 1?

Просто надеюсь на некоторое просветление. Спасибо.

Ответы

Ответ 1

В целом релевантность основывается на том, сколько совпадений каждой строки приходится на слова, данные для поиска. Точное значение будет зависеть от многих вещей, но это действительно важно только для сравнения с другими значениями релевантности в одном и том же запросе.

Если вам действительно нужна математика, вы можете найти ее в внутреннее руководство.

Ответ 2

В качестве примера возьмем запрос "word1 word2".

Режим BOOLEAN указывает, что весь ваш запрос совпадает с документом (например, он содержит как word1, так и word2). Логический режим - строгое соответствие.

Используемая формула основана на векторной космической модели поиска. Он очень упрощен, он определяет две меры, чтобы определить, насколько важно слово для запроса. Термин частота (термины, которые часто встречаются в документе, важнее других терминов) и частоту обратного документа (термин, который встречается во многих документах, взвешен ниже, чем термин, который встречается в нескольких документах). Это называется tf-idf и используется в качестве основы для модели векторного пространства. Эти оценки составляют основу для Vector Space Model, которую кто-то может объяснить подробно.:)