在MySQL中获得更准确结果的最佳方法

在MySQL中获得更准确结果的最佳方法,mysql,performance,search,procedure,temporary,Mysql,Performance,Search,Procedure,Temporary,我面临着一个关于开发环境的难题。这是一个三表结构: 表内容(文章、新闻…) 表标签(每篇文章和新闻记录的标签) 表跳过单词(如“for”、“get”、“to…”等单词) 主要思想是根据文本搜索获取内容记录,如何 首先,根据跳过单词表从文本搜索中删除单词,然后将其余单词与标记表匹配。然而,作为一个例子,我想给出一个“更聪明”的结果 第二步,我想首先获得与文本搜索中所有剩余单词匹配的文章。这些记录将是主要的印刷品 第三步如果没有与文本搜索的所有单词匹配的记录,则开始查找与较少单词匹配的记录,并对其进

我面临着一个关于开发环境的难题。这是一个三表结构:

  • 表内容(文章、新闻…)
  • 表标签(每篇文章和新闻记录的标签)
  • 表跳过单词(如“for”、“get”、“to…”等单词)
  • 主要思想是根据文本搜索获取内容记录,如何

    首先,根据跳过单词表从文本搜索中删除单词,然后将其余单词与标记表匹配。然而,作为一个例子,我想给出一个“更聪明”的结果

    第二步,我想首先获得与文本搜索中所有剩余单词匹配的文章。这些记录将是主要的印刷品

    第三步如果没有与文本搜索的所有单词匹配的记录,则开始查找与较少单词匹配的记录,并对其进行计数,依此类推,直到我获得内容记录列表

    最后一步是显示根据单词匹配量排序的记录。因此,考虑到这个过程,我认为使用:

  • 用于加载上述所有步骤中的数据的临时表
  • 使用一个存储过程和所需的所有逻辑
  • 上面使用“Like”条件比较标记(
    和类似“word1%”的字段以及类似“word2%”的字段


    然而,我关心的是性能。这将是主页网站的一个过程,每小时访问量超过1700次。我希望你能解释一下你对这种过程的经验(如果有的话)?或者,考虑到性能,您认为哪种方法是最好的实现方法?

    使用
    全文索引。它涵盖了您试图重新发明的一些想法。1700/小时不会有问题

    WHERE MATCH(col) AGAINST('join*' IN BOOLEAN MODE)
    

    匹配join/join/join和joint。

    1000次访问一天算不了什么,在一分钟获得1000次访问之前不要担心。在模式末尾使用通配符应该可以。如果是在模式的开始,这将是一个问题。请确保搜索列已编入索引。对不起,我编辑了它。该网站(平均)每小时访问1700次!事实上,全文索引在我脑海中闪过,但根据我的研究,这个索引允许使用通配符,但问题是,例如,如果我查看“join*”,它会找到包含“joins”、“join”等词的记录。但我需要另一种方式,我需要一个标记“joi”,这样它就可以执行类似->where“joins”的操作与concat(tag,“%”)一样,Andino-我添加了一个布尔模式下的
    “join*”示例
    谢谢您的示例@RickJames。但我需要的恰恰相反。例如,如果用户键入“joining”,我需要将其与列进行比较。在索引列中,我们只能在文本中找到“joi”。那么,有没有一种方法可以使用,例如MATCH(col)但使用通配符,比如
    MATCH(concat(col,“*”)
    或类似的东西?。这是因为查找“join”的所有组合并将它们添加到具有全文索引的列中对我来说是不起作用的