您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使用php和mySQL实现简单的站点搜索?

如何使用php和mySQL实现简单的站点搜索?

每个人都建议使用MysqL全文搜索,但是您应该注意一个巨大的警告。全文搜索引擎仅适用于MyISAM引擎(不适用于InnoDB,因其参照完整性和ACID兼容性,它是最常用的引擎)。

因此,您有几种选择:

最简单的方法由“ 粒子树”概述。您可以从纯sql中获得排名搜索(没有全文,没有任何内容)。下面的SQL查询搜索一个表,并根据搜索字段中出现的字符串数对结果进行排名:

SELECT
    SUM(((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'term', '')))/4) +
        ((LENGTH(p.body) - LENGTH(REPLACE(p.body, 'search', '')))/6))
    AS Occurrences
FROM
    posts AS p
GROUP BY
    p.id
ORDER BY
    Occurrences DESC

编辑了他们的示例以提供更多的清晰度

上面的SQL查询的变体,添加WHERE语句(WHERE p.body LIKE’%whatever%you%want’)等,可能会完全满足您的需求。

您可以更改数据库架构以支持全文。无需安装Sphinx Fulltext Search Engine for MysqL之类的插件来保持InnoDB引用完整性,ACID遵从性和速度的通常做法是将报价数据拆分到其自己的表中。基本上,您将有一个Quotes表,它是一个InnoDB表,而不是您的TEXT字段为“ data”,而是具有引用“ quote_data_id”,该引用指向Quote_Data表(即MyISAM表)上的ID。您可以在MyISAM表上使用全文本,将InnoDB表返回的ID合并在一起,然后就可以得到结果。

安装Sphinx。祝你好运。

鉴于您的描述,我 建议您采用我介绍的第一种方法,因为您有一个简单的数据库驱动站点。第一种解决方案很简单,可以快速完成工作。Lucene将非常麻烦地进行设置,尤其是当您要将Lucene与数据库集成时,Lucene的主要目的是索引文件而不是数据库。Google自定义站点搜索只会使您的站点失去大量声誉(使您看起来很业余和被黑),而MysqL全文很可能会导致您更改数据库架构。

php 2022/1/1 18:15:08 有428人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶