删除重复单词 mysql concat_ws

发布于 2024-11-17 18:19:01 字数 496 浏览 2 评论 0原文

我有一个查询,在其中选择 sphinx 索引所需的数据。我做的事情之一是多个名称别名、不同语言等的 concat_ws。当名称重叠时,就会出现问题。例如:一个条目的名称为“Clannad”,替代标题为“CLANNAD -kuranaド-”。另一个名称为“Clannad After Story”、“kuranado afatasutori”和“Clannad: After Story”。现在请耐心等待,因为我知道在这种特殊情况下这很容易解决,但我希望它适用于所有情况。如果您搜索“Clannad”,您将首先看到“After Story”条目,因为“Clannad”上存在双重匹配。

我想要做的是删除 concat_ws 语句中的所有重复单词/非唯一单词。如果可能的话。

查询看起来像这样:(

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

我希望我正确地构造了这个问题,这是我在这里的第一个) 谢谢你,

I have a query in which I select the data I need for a sphinx index. One of the things I do is a concat_ws of multiple name aliases, different languages and such. This presents a problem when the names overlap. For example: one entry has the names "Clannad", and the alternative title "CLANNAD -クラナド-". Another has the names "Clannad After Story", "クラナド アフターストーリー" and "Clannad: After Story". Now bear with me, because I know this would be easily resolved in this particular case, but I'd wish for it to be applicable all over the board. If you search "Clannad" you'll get the After Story entry first because of the double match on 'Clannad'.

What I'd like to do is remove all duplicate words/non-unique words in the concat_ws statement. If that is even possible.

The query looks something like:

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

(I hope I structured this question correctly, this being my first here)
Thank you,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

葵雨 2024-11-24 18:19:01

正如 Marc 在评论中所建议的,这在 SQL 中管理起来非常痛苦(据我所知)。我建议将处理后的值缓存在另一列中,然后对其进行索引。

SELECT a.name_words AS name, ...

组合每个名称值然后获取不同的单词是另一回事 - 但这实际上取决于您手头使用的语言。不过,正则表达式应该会有所帮助 - 这是 Ruby 中的一个快速尝试:

[name, name2, name3, name4].join(' ').split(/\b/).reject { |word|
  word.blank?
}.collect { |word|
  word.downcase
}.uniq

As Marc has suggested in a comment, this quite painful to manage in SQL (as far as I can see). I'd suggest caching the processed value in another column, and then index that.

SELECT a.name_words AS name, ...

Combining each of your name values and then getting the distinct words is a separate matter - but that really depends on what language you have at hand. Regular expressions should be of some help though - here's a quick attempt in Ruby:

[name, name2, name3, name4].join(' ').split(/\b/).reject { |word|
  word.blank?
}.collect { |word|
  word.downcase
}.uniq
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文