Удаление повторяющихся слов mysql concat_ws - PullRequest
0 голосов
/ 27 июня 2011

У меня есть запрос, в котором я выбираю данные, необходимые для индекса сфинкса. Одна из вещей, которые я делаю, - это concat_ws из нескольких псевдонимов имен, разных языков и тому подобное. Это создает проблему, когда имена перекрываются. Например: одна запись имеет имена «Clannad» и альтернативное название «CLANNAD - ク ラ ナ ド -». У другого есть названия «Кланнад после истории», «lan ラ ナ lan ア フ タ ー ス ト ー リ ー» и «Кланнад: после истории». А теперь терпите меня, потому что я знаю, что это будет легко решено в данном конкретном случае, но я бы хотел, чтобы это было применимо по всей доске. Если вы будете искать «Clannad», вы сначала получите запись After Story из-за двойного совпадения на «Clannad».

Что я хотел бы сделать, так это удалить все повторяющиеся слова / неуникальные слова в выражении concat_ws. Если это даже возможно.

Запрос выглядит примерно так:

SELECT CONCAT_WS(' ',a.Name,a.Name2,a.Name3,a.Name4) AS name

(надеюсь, я правильно структурировал этот вопрос, это мой первый вопрос здесь) Спасибо,

1 Ответ

0 голосов
/ 28 июня 2011

Как отметил Марк в комментарии, это довольно болезненно в SQL (насколько я вижу).Я бы предложил кэшировать обработанное значение в другом столбце, а затем проиндексировать его.

SELECT a.name_words AS name, ...

Объединение каждого из значений вашего имени и затем получение отдельных слов - это отдельный вопрос - но это действительно зависит от того, на каком языкеу тебя под рукой.Регулярные выражения должны быть полезны - вот быстрая попытка в Ruby:

[name, name2, name3, name4].join(' ').split(/\b/).reject { |word|
  word.blank?
}.collect { |word|
  word.downcase
}.uniq
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...