【问题标题】:Query Optimization on Searching搜索查询优化
【发布时间】:2013-08-30 23:51:40
【问题描述】:

我正在尝试创建一个搜索查询来开发一个学校图书馆,该图书馆将以低成本从数据库中检索数据。我的表格里面有 callNumber,author,titleyear。我想从 callNumber、作者和标题中搜索。

$sqlCommand = "SELECT book_id, author, title 
               FROM book 
               WHERE MATCH(callNumber, author, title) 
               AGAINST('$search' IN BOOLEAN MODE)";

我使用了上面的查询,返回的数据不可靠。优化此查询的任何建议或建议,无论如何。谢谢

【问题讨论】:

  • 您是否创建了合适的索引?
  • “不可靠”是什么意思?你的意思是你得到错误的结果?标题暗示问题在于性能。
  • 当我尝试查看结果时,我得到了正确的结果,但没有出现在结果的第一行。

标签: mysql sql search query-optimization database-optimization


【解决方案1】:

MATCH(...) AGAINST 查询的结果默认按相关性顺序列出。

要列出匹配项的相关性,请尝试以下 SQL:

SELECT book_id, author, title, MATCH(callNumber, author, title) 
               AGAINST('$search' IN BOOLEAN MODE) as relevance
               FROM book 
               WHERE MATCH(callNumber, author, title) 
               AGAINST('$search' IN BOOLEAN MODE)

如果相关性数字不是您所期望的,您应该考虑您的测试数据是否相关。有一些警告,例如:

  • 忽略短词(我认为截止是 4 个字符)。

  • 某些词被忽略(之后,其他等)。

  • 常用词被忽略(出现在至少一半的记录中)

我发现the following page 很有用。

【讨论】:

    猜你喜欢
    • 2018-02-23
    • 2013-03-16
    • 2016-01-06
    • 2021-08-23
    • 2017-06-17
    • 2014-01-17
    • 2015-03-25
    相关资源
    最近更新 更多