Как искать подстроки Soundex() в MySQL?

У меня проблема с Joomla! 3 встроенных поисковика. Индексатор этого движка создает так называемые soundex-значения при индексации контента, например,

Testobject, Testobject 1, Testobject 2239923, Textobject ....

которые имеют одинаковое значение soundex T23123.

Теперь моя проблема, если я ищу Test, тогда не будет никаких результатов, так как значение soundex для этого термина - T230.

Запрос, используемый поисковой системой:

SELECT DISTINCT t.term_id AS id, t.term AS term
FROM tablename AS t
WHERE t.soundex = SOUNDEX('test')

Я проверил функцию soundex_match в этой теме, но, к сожалению, это не может решить мою проблему, потому что она не сравнивает значения soundex.

Я хочу избежать взлома ядра cms и хотел бы понять, есть ли какая-то процедура аппроксимации, доступная для сравнения значений soundex, как для обычных запросов при использовании % символ, который я мог бы затем попытаться реализовать с помощью плагина или чего-то еще.

MSSQL DIFFERENCE Упомянутая здесь функция будет идеальной, если она будет доступна в MySQL и готова использовать значение soundex в качестве второго параметра.

Я не очень хорошо разбираюсь в MySQL и не знаю, как улучшить запрос, чтобы он соответствовал soundex-подстрокам.

1 ответ

Решение

Вы, вероятно, хотите рассчитать расстояние Левенштейна; но если вы просто хотите найти те записи, которые начинаются с чего-то похожего на поисковый запрос, вы можете убрать любой трейлинг 0 (который просто используется для заполнения), а затем ищите строки soundex с результирующим префиксом:

WHERE t.soundex LIKE CONCAT(TRIM(TRAILING '0' FROM SOUNDEX('test')), '%')
Другие вопросы по тегам