【问题标题】:Instant search using fulltext instead of LIKE php mysql使用全文而不是 LIKE php mysql 进行即时搜索
【发布时间】:2014-05-12 11:41:20
【问题描述】:

我想使用 jquery php 和 mysql 对我的网站进行即时搜索。 以前我曾经在keyup 上从.searchbox 获取文本并通过ajax 向php 发送请求。

PHP

$query="Select from names where concat(fname," ",lname) Like '$search%' "

这会很好。但我听说全文比 LIKE 快很多。但它恰好只有在有人写全名时才起作用。 因此无法自动完成搜索。我想知道我上面的代码是否有任何替代方法,使用全文或任何其他方式要快得多。

【问题讨论】:

  • 今天的 MySQL 不能为计算列使用索引。但是你真的有性能问题吗?如果是,您可以考虑对数据进行非规范化,添加一个带有索引的 full_name 列,并使用触发器将数据与您的两列同步。作为替代方案,您可以考虑使用MariaDB

标签: php jquery mysql search full-text-search


【解决方案1】:

如果您正在寻找一个强大的搜索系统,那么您需要研究 Apache Lucene。从我在几个论坛上读到的内容来看,MySQL FullText 与 Apache Lucene 相比确实很慢。您还可以查看 Apache Solr(基于 Apache Lucene)。

如果您尝试构建自动完成字段,则需要查看: - Twitter的Typeahead - jQuery 用户界面

您可以在此处找到有关自动完成字段的优秀教程: http://www.pontikis.net/blog/jquery-ui-autocomplete-step-by-step

【讨论】:

    【解决方案2】:

    我建议

    在 PHP 中

    $search_name=explode(" ", addslashes($search));
    fname =  $search_name[0];
    if(!empty($search_name[1])) { 
        $lname = $search_name[1];
        $sql_add = "(lname LIKE '$lname%') OR";
    } else $sql_add="";
    

    在 sql 中

    "Select from names where $sql_add fname LIKE '$fname%'"
    

    确实可能会有很多结果,但总比因为sql条件而丢失一些结果要好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多