Измерение в полнотекстовом поиске измеряется?
Я делаю викторину, и когда викторины вставляют вопросы в Банк вопросов, я должен проверить БД на повторяющиеся/очень похожие вопросы.
Тестирование MySQL MATCH()... AGAINST(), самая высокая релевантность, которую я получаю, равна 30+, когда я тестирую 100% аналогичная строка.
Так что же такое релевантность? Чтобы процитировать руководство :
Значения релевантности - неотрицательные числа с плавающей запятой. Нулевая релевантность означает отсутствие сходства. Релевантность вычисляется на основе количества слов в строке, количества уникальных слов в этой строке, общего количества слов в коллекции и количества документов (строк), содержащих определенное слово.
Моя проблема заключается в том, как проверить значение релевантности, если строка является дубликатом. Если он 100% дублируется, не позволяйте ему входить в Банк вопросов. Но если это так похоже, попросите викторину проверить, вставить или нет. Итак, как мне это сделать? 30+ для 100% идентичной строки не является процентом, поэтому я пень.
Спасибо заранее.
Ответы
Ответ 1
andygeers находится на правильном пути: эти цифры не имеют эмпирического значения, отличного от их отношений друг к другу, и не могут использоваться сами по себе, чтобы определить, что является или не является "точным соответствием". Тебе нужно это определить. Даже если не считать ограничений по поиску в полнотекстовом поиске, существует также открытый вопрос о том, что вы считаете "точным совпадением". (Фактический текст или совпадение совпадений soundex) Сопоставляют ли синонимы (например, "кушетка" или "диван" ) как совпадающие или раздельные? Должны ли быть предприняты попытки компенсировать орфографические ошибки? И т.д.)
Если бы у меня была необходимость выполнить такую проверку, я бы захватил только запись с наивысшим рангом, возвращаемую полнотекстовым поиском, удаляла любые назначенные стоп-слова, нормализовала пробел, конвертировала в нижний регистр, выполняла сравнение и оставляла на этом пока я не столкнулся с случаем, который призывал его к дальнейшему уточнению. На самом деле это не так много лишней работы - если вы укажете язык, который вы используете для своего приложения, вы, вероятно, можете найти кого-то здесь, который мог бы написать функцию нормализации в пределах дюжины строк кода.
Ответ 2
Основной структурой данных для поисковой системы является Инвертированный указатель. Это, по сути, список слов, найденных в коллекции документов, со списком документов, в которых они встречаются. Он также может иметь метаданные о возникновении для каждого документа, такие как количество раз, когда слово появляется.
Документы, содержащие слова, могут быть запрошены путем сопоставления поисковых запросов. Чтобы определить релевантность, эвристика, известная как Косинус Рейтинг, рассчитывается на основе хитов. Это работает путем построения n-мерного вектора с одним компонентом для каждого из n поисковых терминов. Вы также можете весить условия поиска. Этот вектор дает точку в n-мерном пространстве, которая соответствует вашим условиям поиска.
Аналогичный вектор, основанный на взвешенных вхождениях в каждом документе, может быть построен из инвертированного индекса с каждой осью в векторе, соответствующем оси для каждого условия поиска. Если вы вычислите точечный продукт этих векторов, вы получите косинус угла между ними. 1,0 эквивалентно cos (0), что предполагает, что векторы занимают общую линию от начала координат. Чем ближе векторы вместе, тем меньше угол и ближе косинус равен 1,0.
Если вы сортируете результаты поиска по косинусу (или вставляете их в очередь приоритетов как mg), вы получаете больше всего Соответствующий. Умные алгоритмы релевантности имеют тенденцию возиться с весами поисковых терминов, искажая точечный продукт в пользу терминов с высокой релевантностью.
Если вы хотите немного выкопать, Управление гигабайтами Bell и Moffet обсуждает внутреннюю архитектуру текстовых поисковых систем.
Ответ 3
Я не знаю специфики используемой вами функции MySQL, но я думаю, что это может быть так, что для этих чисел нет абсолютного значения - они просто предназначены для сравнения с другими значениями, производимыми тем же функция. Чтобы проверить абсолютное соответствие, вы можете выбрать сам текст и сравнить его вручную.