Как искать подстроки 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')), '%')