【问题标题】:Mysql Search for Domain NamesMysql搜索域名
【发布时间】:2010-11-02 15:02:34
【问题描述】:

我有一张满是域名的表格。我想做一个返回某种相关性结果的搜索。我的问题是,如果我搜索“cool”,我希望它返回“cooldomain.com”,除非我做错了,否则全文搜索不会。

是否有任何我不知道的全文选项可以实现此目的?如果没有,我该怎么做?

【问题讨论】:

    标签: mysql search full-text-search domain-name


    【解决方案1】:

    您需要为您的表设置一个 FULLTEXT 索引,然后执行以下操作:

    SELECT *, MATCH(domain_name) AGAINST ('{search term here}' IN BOOLEAN MODE) as Relevance 
    FROM domains 
    WHERE MATCH (domain_name) AGAINST('{search term here}' IN BOOLEAN MODE) 
    ORDER BY Relevance DESC
    

    【讨论】:

      【解决方案2】:

      我会在这里使用 LIKE,全文搜索用于匹配完整的单词或表达式,查询扩展等。我认为 * operator 在使用 MATCH 时只能用作后缀,所以你会错过 imcool .com...

      我认为您必须收集更多信息才能进行相关性排序。

      编辑: 如果你想使用索引,你也可以将域的单词存储在另一列中,并在这一列上使用全文搜索的力量......

      【讨论】:

      • sigh 希望有比这更好的解决方案。我有一个单独的列,但它是用户提交的,所以我不能保证他们会做对。
      【解决方案3】:

      试试类似的东西

      SELECT * FROM domains WHERE domain_name LIKE 'cool%';
      

      【讨论】:

      • "cooldomain.com" 只是一个例子。 LIKE 'cool%' 不会匹配“awesomecool.com”。
      • 您还可以通过将长度为 1 的子字符串存储到另一个表中的完整域的长度来处理每个域,并将每个子字符串链接回主域。这在存储每个域时需要更多的处理,但显然会使搜索变得非常快。对于cooldomain.com(例如),您将存储'c','o',...,'co','oo',...,'coo',...,'cool',' oold',..., etc...,使得匹配只是精确匹配的练习,而不是模式匹配。类似于搜索索引,但用于字符串的字符。
      【解决方案4】:

      老旧的WHERE domain LIKE '%cool%' 会匹配,但不会返回“相关性”——我不确定你会如何定义它。

      【讨论】:

      • 问题是 LIKE '%cool%' 不会使用可用的索引,如果我最终得到一个足够大的表,则会显着减慢搜索速度。
      猜你喜欢
      • 2018-09-01
      • 2013-07-14
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      相关资源
      最近更新 更多