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

     2023-02-23     97

关键词:

【中文标题】如何使用 php 和 mySQL 实现简单的站点搜索?【英文标题】:How would I implement a simple site search with php and mySQL? 【发布时间】:2010-09-28 01:34:29 【问题描述】:

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

例如,如果搜索词是“turkey”,那么我将返回引号,其中“turkey”一词出现在引号之前出现两次,而引号仅出现一次。

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

【问题讨论】:

老实说,SQL(任何变体)都不太擅长这种事情。 【参考方案1】:

我会选择全文搜索,请看这里:http://hockinson.com/fulltext-search-of-mysql-database-table.html

【讨论】:

【参考方案2】:

使用Google Custom Site Search。我听说他们对搜索略知一二。

【讨论】:

我想自己做。每个报价都没有自己的页面,所以无论如何我认为谷歌不会很好地工作。【参考方案3】:

*** plans to use Lucene 搜索引擎。有一个为 Zend 框架编写的 PHP 端口,但可以作为一个单独的实体下载,而不需要所有的 ZF 膨胀。这称为 Zend_Search_Lucene,documentation for which can be found here。

【讨论】:

我有一个疑问@DavidM:我有用 html 和 php 创建的网页。因此,我可以使用 Lucene 搜索引擎在我的网页中搜索任何单词吗?谢谢【参考方案4】:

如果你想自己写,看看phpBB的实现。他们有两个表,第一个是出现在条目中的所有单词的唯一列表,第二个是单词和条目之间的多对多引用。然后,您可以进行分组并计数,以按照您要查找的方式对条目进行排序。

这比实现第三方搜索引擎(或全文搜索)要多得多,但它可以让您更好地控制结果。

【讨论】:

【参考方案5】:

如果您查询的次数不多(我认为您每天可以免费获得 1k 次查询)或者您愿意付费,那么 Google 自定义站点搜索非常棒。

MySQL 的全文搜索也是一个很好的资源(如前所述)。

Yahoo 的 BOSS 是一个有趣的项目——我将在下一个搜索项目中试一试。

最后,如果您需要比全文更强大的功能,但又想调整自己的搜索引擎,Lucene 是一个很好的资源。 http://lucene.apache.org

【讨论】:

【参考方案6】:

你的 sql 看起来像这样(你试图在其中找到带有 'turkey' 的引号):

SELECT * FROM Quotes
WHERE the_quote LIKE "%turkeyt%";

从那里你可以弄清楚如何处理它向你吐出的任何东西。

小心处理恶意用户可能inject malicious SQL 进入您的数据库的情况,特别是如果您打算将其放在 www.不过,如果您这样做是为了好玩,我想这只是您想学习的内容。

如果您不熟悉数据库和 sql,我建议您使用 sqlite 而不是 mysql。 非常更容易设置和使用,就像没有设置一样。它将帮助您解决第一次必须安装和设置 mysql 的潜在麻烦。

【讨论】:

这并没有给你一个排名(例如排名是火鸡的出现次数) 等等,什么?你的意思是我应该小心 SQL 注入?没门! :) 我正在考虑使用您描述的方法,但我认为将其转变为排名系统并不容易。 只是不确定您的技能水平。如果您想要一个简单的排名系统,您可以让用户为引号创建标签并搜索标签,因为引号不是大量的文本,您可能需要分析名词/动词来确定排名。或者只是计算一个单词的出现次数 我不完全理解“引用标签”的评论,但是当有这么多现有的强大选项时,我建议不要将这样的东西组合在一起。包括开箱即用的 MySQL...【参考方案7】:

每个人都建议使用 MySQL 全文搜索,但是您应该注意一个巨大的警告。全文搜索引擎仅适用于 MyISAM 引擎(而非 InnoDB,InnoDB 因其引用完整性和 ACID 合规性而成为最常用的引擎)。

所以你有几个选择:

1.Particle Tree 概述了最简单的方法。您实际上可以从纯 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')等可能会得到你所需要的。

2.您可以更改数据库架构以支持全文。通常,为了保持 InnoDB 的引用完整性、ACID 合规性和速度,而无需为 MySQL 安装像 Sphinx Fulltext Search Engine 这样的插件,可以将引用数据拆分到它自己的表中。基本上你会有一个表 Quotes 是一个 InnoDB 表,而不是你的 TEXT 字段“数据”,你有一个引用“quote_data_id”,它指向一个 MyISAM 表的 Quote_Data 表上的 ID。您可以在 MyISAM 表上执行全文,将返回的 ID 与您的 InnoDB 表连接起来,瞧,您就有了结果。

3. 安装Sphinx。祝你好运。

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

【讨论】:

选项 1 很有趣!以前从未见过。由于查询的复杂性,在实时数据上运行基准测试是必不可少的,但如果你有一个小数据集,它可能是 Sphinx/MyISAM 的一个很好的替代方案 从 MySQL 5.6 开始,全文搜索也可用于 InnoDB。【参考方案8】:

作为 Sphinx 和 Lucene 的替代方案,可以使用 Xapian 库创建一个相对简单的搜索引擎。

+ 支持许多高级搜索功能(例如相关性排名)+ 快​​速

- 你需要学习 API 来创建你的界面- 需要安装一个 php 扩展

另请注意,Xapian 将其数据存储在 mysql 的单独索引中。

您可能还对Forage 感兴趣,它是 Solr、Xapian 和 Lucene 的包装器。

Xapian 人还创建了 Omega 搜索引擎,它是 Xapian 的前端,可以通过 cgi 调用。

【讨论】:

【参考方案9】:

几天前我遇到了Zoom Search Engine,认为这可能是我用过的最简单的搜索引擎。

基于 Windows 的工具会创建站点的数据库,然后它还会询问您要使用哪种语言(PHP、ASP.NET、JavaScript 等)。我选择了 PHP,它为我构建了 PHP 代码。然后,我要做的就是将文件上传到服务器并(可选)自定义模板,然后站点搜索就可以工作了。

这对小型网站是免费的,我能找到的唯一缺点是蜘蛛工具(数据库构建器)必须在 Windows 上运行。

【讨论】:

【参考方案10】:

这里有一个更简单、更容易操作的开源替代 Solr / Lucene:

http://github.com/typesense/typesense

【讨论】:

在 PHP MySql 站点中实现信用卡处理

...取消订单等情况下,该网站还将提供退款保证功能。那么如何使用信用卡/借记卡来实 查看详情

如何使用 php 和 mysql 优化这个简单的数据库和查询?

】如何使用php和mysql优化这个简单的数据库和查询?【英文标题】:HowcanIoptimizethissimpledatabaseandqueryusingphpandmysql?【发布时间】:2011-12-1115:17:59【问题描述】:我从数据库中提取了一系列(例如限制72、24)游戏,根据这些游戏被... 查看详情

带有 MySql 数据库的动态 PHP 网站;如何为此创建站点地图?

】带有MySql数据库的动态PHP网站;如何为此创建站点地图?【英文标题】:DynamicPHPwebsitewithMySqldatabase;Howtocreateasitemapforthis?【发布时间】:2011-05-2522:00:26【问题描述】:我有一个分类网站。该网站基于php,并使用mysql数据库。今天... 查看详情

php+mysql实现简单登录注册修改密码网页

...mysql中的查询,修改,插入等操作掌握,本文介绍了一下如何采用mysql做一个登录注册修改密码的网页。其中,如下1.登录-即为对数据库中的内容给予查询,并验证ht 查看详情

如何使用 Docker 连接 php-apache 和 MySQL?

】如何使用Docker连接php-apache和MySQL?【英文标题】:HowcanIconnectphp-apacheandMySQLusingDocker?【发布时间】:2018-08-2114:11:56【问题描述】:我在实时服务器上有一个Wordpress站点,我想用Docker在本地创建一个LAMP堆栈来测试。我拉取了php:7.... 查看详情

用 PHP 和 MySQL 实现一个简单的队列?

】用PHP和MySQL实现一个简单的队列?【英文标题】:ImplementingasimplequeuewithPHPandMySQL?【发布时间】:2015-02-1201:56:45【问题描述】:我有一个PHP脚本,它从数据库中检索行,然后根据内容执行工作。这项工作可能很耗时(但计算量不... 查看详情

简单搭建搭建lnmp教程(适合小站点)

「LNMP」即Linux,Nginx,MySQL,PHP。我个人的理解是:Linux就是环境所在的操作系统;Nginx则是一个「高性能的HTTP和反向代理服务器」,官网地址:http://nginx.org/;MySQL则是一个方便地对数据进行增删改查的数据库管理系统,官网地... 查看详情

PHP、MySQL 和大量简单查询

...从我的网络服务器查询大量小数据包。现在我不确定是否使用持久数据连接到数据库。该数据库目前与网络服务器位于同一系统上,并且可以通过套接字进行连接,但这可能会在不久的将来发生变化。据我所知,在PHP之前的几 查看详情

aps+php多站点应该如何配置?

...有个ASP网站想利用IIS6.0发布,同一IP,同端口。请问应该如何设置,才能让ASP可以正常访问。(目前在vps上访问ASP网站域名)打开的是PHP网站内容。参考技术A这种情况,不建议使用xampp集成环境来运行php因为你要运行asp,但php环... 查看详情

php和MySQL中简单的喜欢/不喜欢评级系统

...分系统(id=youtubeid)我对php和MySQL没有太多经验,我不确定如何以这种方式使用提交按钮更新字段:<formaction="<?phpecho$_SERVER[\ 查看详情

将 Sphinx 与 PHP 和 MySQL 一起使用的指南

...站上提供的更简单和随和的。我正在寻找一些关于这一切如何运作的概念。我有一个带有PHP、HTML、其他数据和MySQL数据库的服务器。我将如何设置Sphinx来支持搜索和 查看详情

如何使用 jquery mobile 和 ajax 实现浏览器历史记录和书签

】如何使用jquerymobile和ajax实现浏览器历史记录和书签【英文标题】:Howtoimplementbrowserhistoryandbookmarkswithjquerymobileandajax【发布时间】:2013-02-2117:12:34【问题描述】:我正在尝试使用JQM、JQuery、PHP和MYSQL构建一个站点。这个想法是使... 查看详情

如何轻松建站?站点一键部署搭建(详细教程)

越来越多的人选择个人建站,个人站长虽然门槛很低,但是有些朋友觉得Linux服务器各种复杂的命令脚本让自己没法搭建环境。今天就给大家推荐一款使用方便、功能强大的快速建站工具——云帮手,支持Linux与Windows系统,可一... 查看详情

使用 php、pdo 和 mysql 显示当前登录用户的简单计数器

】使用php、pdo和mysql显示当前登录用户的简单计数器【英文标题】:Displayasimplecounterofcurrentlyloggedinusersusingphp,pdoandmysql【发布时间】:2014-02-2413:50:47【问题描述】:我几天来一直在寻找这样一个非常简单的计数器,它可以在我的... 查看详情

使用 PHP 和 MySQL 的引导分页

...数据。有人可以帮忙吗?这里是代码现在的样子的快照。如何实现分页以便只显示10条记录?谢谢。<sectionclass="success"id="all-confessio 查看详情

如何在具有单独模块的旧 php 站点中使用 Babel 或 webpack

】如何在具有单独模块的旧php站点中使用Babel或webpack【英文标题】:HowtouseBabelorwebpackinaoldphpsitewithseparatemodules【发布时间】:2018-10-0309:58:52【问题描述】:我有一个旧项目,我不能使用ES6语法,因为我不知道如何实现Babel或Webpack... 查看详情

MySQL 站点搜索中的参数化查询问题

...【发布时间】:2013-09-2407:01:25【问题描述】:我正在尝试使用c#ASP.NET和MySQL创建一个简单的站点搜索,并且我正在尝试使用参数化查询来防止SQL注入。那里已经有很多信息,但我仍然无法让它工作,任何人都可以看到我的代码有... 查看详情

如何使用 php 和 mysql 使用纬度和经度进行几何搜索

】如何使用php和mysql使用纬度和经度进行几何搜索【英文标题】:Howtodoageometricsearchusinglatitudeandlongitudeusingphpandmysql【发布时间】:2010-05-0311:30:54【问题描述】:有没有人知道如何使用纬度和经度搜索使用纬度和经度使用php和mysql... 查看详情