【问题标题】:Removing duplicate words mysql concat_ws删除重复的单词 mysql concat_ws
【发布时间】:2011-09-23 17:19:23
【问题描述】:

我有一个查询,我在其中选择了 sphinx 索引所需的数据。我做的一件事是多个名称别名、不同语言等的 concat_ws。当名称重叠时,这会出现问题。例如:一个条目的名称为“Clannad”,另一个标题为“CLANNAD  -クラナド-”。另一个名称为“Clannad After Story”、“クラナド アフターストーリー”和“Clannad: After Story”。现在请耐心等待,因为我知道在这种特殊情况下这很容易解决,但我希望它适用于所有方面。如果您搜索“Clannad”,您将首先获得 After Story 条目,因为“Clannad”上有双重匹配。

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

查询看起来像:

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

(我希望我正确地构建了这个问题,这是我的第一个问题) 谢谢,

【问题讨论】:

  • 这在 SQL 中会非常痛苦。在您的客户端脚本中进行后期处理会容易得多。
  • 它在狮身人面像中/用于狮身人面像,我不确定我能做到这一点。也许我应该重新考虑整个事情,并有一个 sphinx 使用的第四个预先连接的列,并让它在 mysql 之外创建。

标签: mysql sphinx distinct concat-ws


【解决方案1】:

正如 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

【讨论】:

    猜你喜欢
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多