目录
回复讨论(解决方案)
首页 后端开发 php教程 做一个搜索引擎

做一个搜索引擎

Jun 23, 2016 pm 02:19 PM

搜索引擎 php 百度 数据库 搜索

就是PHP做一个搜索网站,类似百度那样,对我网站内的所有信息进行搜索。

比喻是一个论坛搜索,我输入:A B C。中间隔着空格,我能筛选出A,B,C三个分开的关键字,然后在数据库进行搜索任何与这3个关键字的内容,这就好像是一个百度搜索或者谷歌搜索的原理。

我自己想到的难点有几个:

1、对3个关键字进行处理的时候,是什么原理,用空格隔开,然后归类为两个不同的关键字?假如我两个关键字之前有别的符号呢?例如A、B   那么处理的时候,也是A和B两个关键字? 那么 A?B呢,怎么实现把关键字筛选出来??

2、在对数据库中进行搜索的时候,我有关键字 A,AB,ABC 3个关键字了,那么我是什么逻辑进行搜索?A或AB或ABC 还是A或B或C? 这个逻辑是怎样?我有点不懂,要做成百度搜索之类的。

3、假如我有很多个搜索条件(参考上面的问题),那么多得搜索逻辑,是把很多个搜索逻辑放到一个sql语句(进行一次sql查询之后返回一个结果array)?还是没一个逻辑就一个sql语句,然后对每一句查询返回结果array,然后再汇总?

回复讨论(解决方案)

或者我说白一点吧,我要做一个  找到美食  的网站,里面就是菜式,标签,店铺,地址之类的一些简单信息,就这些,那我搜索的时候,输入的关键字可能是标签 或菜式名或店铺名,或多个关键字一起,怎么实现?

额,是在thinkphp框架下做的,我现在最难的一点就是,接收前台数据处理,和数据库方面的sql语句以及逻辑,最好能给一下代码,不行,讲解下原理也好。谢谢

或者我说白一点吧,我要做一个  找到美食  的网站,里面就是菜式,标签,店铺,地址之类的一些简单信息,就这些,那我搜索的时候,输入的关键字可能是标签 或菜式名或店铺名,或多个关键字一起,怎么实现?

我是这样想的。就一条sql 语句,别分开了再汇总,挺烦的,用模糊匹配,比如你有标签(暂时字段是title),菜名(dish_name ),店名(dianming ),写成:select * from table_name where title like %输入的关键词% or dish_name like %输入的关键词% or dianming like %输入的关键词% ...............我没做过,但我想的是这样的

首先说一下百度,谷歌,淘宝的搜索引擎算法还是有点复杂的,关键一直有变,不然市场上也不会出现专门做SEO的职业!不过你的网站估计不用那么复杂。我说说个人看法!

1.A与B用空格隔开可以单纯的用 select * from 索引表 where 索引字段 like "%A%" or  索引字段 like "%B%",

A、B可以加大权重,比如
select * from 索引表 where 索引字段 like "%A、B%" union 
select * from 索引表 where 索引字段 like "%A%" or  索引字段 like "%B%"
这样符合A、B就会排在前面,符合A或者符合B在后面

2,一样的分权重,用union与order by 权重字段,外加上其他的条件语句not,or,and,in等,具体权重怎么分,看自己的算法了,比如标签排第一,菜式排第二,这个根据具体需求做!(需要说一下,有些关键字属于不重要的,经常出现,权重可以低一些,比如“我”这个字,有可能就会在很多地方出现了)

3.如果关键字太多,首先你要对关键字的长度做限制(淘宝他们也都有对关键字做限制),可以在进数据库查询前先用程序写一个简单的算法,把关键字先初步整理一下再放到SQL语句中。


当然这里讲的还是简单的方法,个人觉得除非你的网站规模已经非常大了,不然应该勉强够用了!

友情提醒:需要建立索引表,还要需要对数据库做优化,不然怕响应时间太慢!

一般多关键字间的
空格表示 或,A B ==> A or B
加号表示 与,A+B ==> A and B
你可以自行约定,但最好是符合布尔表达的规则

直接构造出 SQL 指令并不可取,因为变数太多,容易顾此失彼
当搜索表达式能格式化成布尔表达式时,你就可以套用现成的布尔表达式解析程序进行

1、对3个关键字进行处理的时候,是什么原理,用空格隔开,然后归类为两个不同的关键字?假如我两个关键字之前有别的符号呢?例如A、B   那么处理的时候,也是A和B两个关键字? 那么 A?B呢,怎么实现把关键字筛选出来??
第一个问题是关于分词的,目前有一个比较出名的系统叫"盘古分词",你可以研究看看,另外百度,google之类的他们都建立了自己的词库,这一点我深信不疑

2、在对数据库中进行搜索的时候,我有关键字 A,AB,ABC 3个关键字了,那么我是什么逻辑进行搜索?A或AB或ABC 还是A或B或C? 这个逻辑是怎样?我有点不懂,要做成百度搜索之类的。
这个部分你可以开发的灵活一点,视状况随时调整就行了,目前大搜索引擎也是在随时调整的.

3、假如我有很多个搜索条件(参考上面的问题),那么多得搜索逻辑,是把很多个搜索逻辑放到一个sql语句(进行一次sql查询之后返回一个结果array)?还是没一个逻辑就一个sql语句,然后对每一句查询返回结果array,然后再汇总? 
你可以这样写
$sql='';
if ($k!=''){
$sql.=" OR Locate("%{$key}%",key)>0"; 
}
"select ?? from 表 where 字段='值'{$sql}"
这里我没有用like,因为like效率不够高

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

11个最佳PHP URL缩短脚本(免费和高级) 11个最佳PHP URL缩短脚本(免费和高级) Mar 03, 2025 am 10:49 AM

长URL(通常用关键字和跟踪参数都混乱)可以阻止访问者。 URL缩短脚本提供了解决方案,创建了简洁的链接,非常适合社交媒体和其他平台。 这些脚本对于单个网站很有价值

Instagram API简介 Instagram API简介 Mar 02, 2025 am 09:32 AM

在Facebook在2012年通过Facebook备受瞩目的收购之后,Instagram采用了两套API供第三方使用。这些是Instagram Graph API和Instagram Basic Display API。作为开发人员建立一个需要信息的应用程序

在Laravel中使用Flash会话数据 在Laravel中使用Flash会话数据 Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

构建具有Laravel后端的React应用程序:第2部分,React 构建具有Laravel后端的React应用程序:第2部分,React Mar 04, 2025 am 09:33 AM

这是有关用Laravel后端构建React应用程序的系列的第二个也是最后一部分。在该系列的第一部分中,我们使用Laravel为基本的产品上市应用程序创建了一个RESTFUL API。在本教程中,我们将成为开发人员

简化的HTTP响应在Laravel测试中模拟了 简化的HTTP响应在Laravel测试中模拟了 Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

php中的卷曲:如何在REST API中使用PHP卷曲扩展 php中的卷曲:如何在REST API中使用PHP卷曲扩展 Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

在Codecanyon上的12个最佳PHP聊天脚本 在Codecanyon上的12个最佳PHP聊天脚本 Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

宣布 2025 年 PHP 形势调查 宣布 2025 年 PHP 形势调查 Mar 03, 2025 pm 04:20 PM

2025年的PHP景观调查调查了当前的PHP发展趋势。 它探讨了框架用法,部署方法和挑战,旨在为开发人员和企业提供见解。 该调查预计现代PHP Versio的增长

See all articles