科技知识动态:做一个搜索引擎

导读跟大家讲解下有关做一个搜索引擎,相信小伙伴们对这个话题应该也很关注吧,现在就为小伙伴们说说做一个搜索引擎,小编也收集到了有关做一个

跟大家讲解下有关做一个搜索引擎,相信小伙伴们对这个话题应该也很关注吧,现在就为小伙伴们说说做一个搜索引擎,小编也收集到了有关做一个搜索引擎的相关资料,希望大家看到了会喜欢。

搜索引擎 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效率不够高

来源:php中文网

免责声明:本文由用户上传,如有侵权请联系删除!