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, которую кто-то может объяснить подробно.:)