【问题标题】:Improving Full Text Search MYSQL改进全文搜索 MYSQL
【发布时间】:2012-10-09 16:53:33
【问题描述】:

我有一个基于搜索引擎的网站,目前处于测试模式http://www.jobportfolio.co.uk。该站点有一个工作表,其中包含以下字段(job_company、job_title、job_description、job_location),除了作为文本字段的描述之外,所有字段都是 Var。所有字段都被索引为全文。

我目前的方法是根据标题、位置和公司进行搜索。这似乎工作正常,但是我想通过添加描述字段来改进搜索结果。然而,问题是当我添加描述字段时,搜索似乎需要更长的时间。即使使用仅包含 12000 行的表,它似乎也很慢。

我正在使用以下 MATCH AGAINST 查询来选择结果

MATCH(job_posts.job_title, job_company) AGAINST('".$this->mysqli_escape($job_title)."' IN BOOLEAN MODE) 

有人对如何提高搜索性能有任何意见吗?

【问题讨论】:

  • 您有一个覆盖这些字段的全文索引,还是有多个覆盖部分/部分字段的全文索引?
  • 另外,除了IN BOOLEAN MODE,还有更多选择。
  • 我使用 PHPMYADMIN 并分别为每个字段提供全文索引。有一个索引来涵盖所有内容会更好吗?

标签: php mysql full-text-search


【解决方案1】:

嗯,我的第一个想法是从“外部”解决这个问题:拥有一个使用多个不同字段的搜索表单是否可以接受?如果您愿意有 4 个搜索字符串,每个搜索字符串都在不同的列中搜索,我怀疑这会自行减少负载。例如:

当有人在“位置”字段中键入内容时,您会在查询中添加一个子句,仅将搜索到的文本与位置字段匹配。

当有人在“描述”字段中键入内容时,您会在查询中添加一个子句,以匹配搜索文本与描述字段。否则,您不会与描述字段匹配任何内容。

如果您不需要将文本输入到一个位置并为其搜索“所有可能的字段”,则此解决方案将防止出现额外的缓慢,直到有人特别想在描述文本中进行搜索。因此查询速度会根据搜索者的需求而有所不同。

【讨论】:

  • 我想我明白你的意思了。目前有 2 个表单字段,如果您搜索位置,它只会搜索一个位置字段。如果描述字段完整,它将搜索其他字段。
  • 是的。但我理解您在上面引用的 SQL sn-p MATCH(job_posts.job_title, job_company) AGAINST('{$string}' IN BOOLEAN MODE),这意味着您输入的字符串将同时与列出的所有字段进行比较。在许多情况下,这是必要的,如果不这样做,搜索就没有意义;但如果默认始终搜索所有字段,性能会受到影响。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
相关资源
最近更新 更多