当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用php和mySQL实现简单的站点搜索?》经验,为你挑选了2个好方法。

我正在创建一个允许用户提交引号的网站.我将如何创建一个(相对简单的?)搜索,返回最相关的引号?

例如,如果搜索词是"turkey",那么我会返回引号,其中单词"turkey"在引号之前出现两次,只出现一次.

(我会添加一些其他规则来帮助过滤掉不相关的结果,但我主要担心的是.)



1> dcousineau..:

每个人都建议使用MySQL全文搜索,但是你应该知道一个巨大的警告.全文搜索引擎仅适用于MyISAM引擎(不是InnoDB,由于其参照完整性和ACID合规性,它是最常用的引擎).

所以你有几个选择:

1.最简单的方法是通过概括粒子树.您可以从纯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'%,无论你想要多少%)等等,可能会得到你所需要的.

2.您可以更改数据库架构以支持全文.通常,为了保持InnoDB参照完整性,ACID合规性和速度而不必安装像Sphinx全文搜索引擎 for MySQL 这样的插件,将报价数据拆分为自己的表.基本上你会有一个表引用,它是一个InnoDB表,而不是你的TEXT字段"data"你有一个引用"quote_data_id",它指向一个Quote_Data表上的ID,这是一个MyISAM表.您可以在MyISAM表上进行全文,加入与InnoDB表一起返回的ID,然后就可以得到结果.

3.安装Sphinx.祝你好运.

鉴于您所描述的内容,我强烈建议您采用我提出的第一种方法,因为您有一个简单的数据库驱动站点.第一个解决方案很简单,快速完成工作.如果你想将Lucene与数据库集成,Lucene将会成为一个蠢事,因为Lucene主要用于索引文件而不是数据库.Google自定义网站搜索只会让您的网站失去大量声誉(让您看起来很业余和被黑客攻击),而且MySQL全文很可能会导致您更改数据库架构.


选项1很有趣!以前从未见过。由于查询的复杂性,对实时数据运行基准测试是必不可少的,但是如果您的数据集很小,则可以替代Sphinx / MyISAM
从MySQL 5.6开始,Full TEXT搜索也可用于InnoDB。

2> nickf..:

使用Google自定义网站搜索.我听说他们对搜索有所了解.


我想做我自己的.每个引用都没有自己的页面,所以我认为Google无论如何都不会很好.
推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有