Добрый день!
Сразу начну - да, я знаю о существовании решений типа Sphinx и Elasticsearch и не исключаю, что перейду на них в будущем.
Но хотел немного поэкспериментировать с fulltext-поиском в MySQL, пока проект небольшой.
Суть вот в чем - я делаю поиск IN BOOLEAN MODE; например, песню с названием Nirvana Smell Like Teen Spirit.
Но при этом в результатах запроса будут: вообще песни, где есть слово Nirvana, и песни со словами Like, Teen, Spirit... Конечно, те, в которых будет несколько слов - будут выше, но все же, будет куча лишнего мусора.
Возможно ли сделать так, чтобы возвращались только те результаты, которые хотя бы на половину похожи на поисковую фразу, например, Nirvana Smell Like Teen Spirit (vocal cover), но при этом не искало все песни Nirvana и все, где, к приммеру, встречается слово Like?
Может, это связано с модификатором, который возвращает MATCH... AGAINST? Хотя я так понял, он довольно абстрактный и поможет мало.
Или решение этой задачи невозможно и пора мне изучать Sphinx?
atis //: а какие альтернативы? Вот я уже уперся, что фуллтекст слабо справляется с нужной задачей. А нужно всего-то неточный поиск по одному полю базы данных (когда несколько слов могут отличатся, или перепутано несколько букв в нескольких словах)
Андрей Павленко: я бы рекомендовал использовать Elastic Search. Никто не говорит что нельзя использовать сфинкс. Это хороший инструмент.
Только перед тем как использовать любое из этих решений поработайте с обеими!
Отлично! Я видел эту статью. Сразу вопрос. Как выставить значение X, если оно для каждого запроса может быть своим? Нужно, чтобы строка совпадала хотя бы на 50-70%. Какое значение X поставить для этого?
В голову приходят мысли о том, чтобы посчитать максимальную и минимальную отличную от нуля релевантность, медиану релевантности, среднее значение релевантности по конкретному заданному запросу, а затем исходя из этих параметров принять решение об установлении порога минимальной релевантности и с этим порогом вернуть результаты запроса.