PHP 这种js实现搜索功能能是如何实现的?

php实现模糊搜索,用户如何在输入关键词时获得带有任何关键词的结果
<a data-traceid="question_detail_above_text_l&&
利用php 实现模糊搜索时,需要实现吗、用户输入关键词,点击搜过获得带有关键词任何子字符串的结果。比如输入“软1”或“1软”得到“软件工程121”,“软件工程122”,"软件工程111",“软绵绵11”,“1柔软”这样子的结果,各位大侠,帮我解答。十分感谢
用php分词然后组合模糊搜索。或者更好的办法是利用xunsearch这类的全文检索技术,能让得出的结果更科学合理。
--- 共有 3 条评论 ---
: 肯定是要分词的啊,xunsearch也还不是自动给你分词了。至于淘宝的不清楚,应该有自己的搜索引擎配合他特定优化了的分词吧,分词是成本最低的总不会上语义分析吧
有人告诉我用中文分词技术
xunsearch貌似是不太适合,问个问题,像淘宝这种网站,用户输入关键词,就出现包含此关键词的结果,他们是怎么做的?然后用户在输入框输入的条件是连续的字符串,如何分割?
淘宝自己应该有一套搜索引擎的搜索关键词的智能提示是怎么实现的?
&#xe609;原创
&#xe60e; 09:42:31
&#xe756;615
搜索的智能提示是一个搜索应用的标配,主要作用是避免用户输入错误的搜索词,并将用户引导到相应的关键词上,提升用户体验。
由于中文的特点,如果搜索自动提示可以支持拼音的话会给用户带来更大的方便,免得切换输入法。
目前大多数的电子商务网站都支持拼音提示功能。 二,目标基于用户的历史搜索关键字进行提示同时支持汉字,拼音输入支持前缀匹配,比如输入“CH”可能提示出“重庆”支持缩写输入,比如输入“CQ”能提示出“重庆”多音字支持,比如输入“重庆”或者“中青”都能提示出“重庆”输出结果,根据用户查询关键字的频率进行排序,暂时不考虑个性化需求比如 我输入杨字,他会给我提示以下搜索提示我尝试着用JavaScript做了一个类似的练习,以下是我用VS2013写的代码,有不对的地方,请不吝赐教。 1 &!DOCTYPE html& 2 &html xmlns=&&& 3 &head& 4 &meta http-equiv=&Content-Type& content=&text/ charset=utf-8&/& 5 &title&&/title& 6 &script type=&text/javascript&& 7
8 onload = function () { 9 10 function handle() {11 var keyWords = {
12 &杨忠科&: [&杨忠科的视频&, &杨忠科的微博&, &杨忠科的邮箱&],13 &杨&: [&杨利伟&, &杨振宇&, &杨过&],14 &杨忠&: [&杨忠科&, &杨忠学&, &杨忠爱国&],15 &杨忠科爱&:[&杨忠科爱祖国&,&杨忠科爱首都&,&杨忠科爱学习&]16 };17 if (keyWords[this.value]) {18 //判断body中是否有这个层,如果有就删掉了19 if (document.getElementById(&#39;dv&#39;)) {20 document.body.removeChild(document.getElementById(&#39;dv&#39;));21 }22 //开始创建层23 var dvObj = document.createElement(&#39;div&#39;);24 dvObj.id = &#39;dv&#39;;25 dvObj.style.width = &#39;300px&#39;;26 //dvObj.style.height = &#39;200px&#39;; //将来可以不要27 dvObj.style.border = &#39;1px solid red&#39;;28 document.body.appendChild(dvObj);29 //脱离文档流30 dvObj.style.position = &#39;absolute&#39;;31 dvObj.style.left = this.offsetLeft + &#39;px&#39;;32 dvObj.style.top = this.offsetHeight + this.offsetTop + &#39;px&#39;;33 //循环创建34 for (var i = 0; i & keyWords[this.value]. i++) {35 //创建一个可以存文本的标签36 var pObj = document.createElement(&#39;p&#39;);37 pObj.innerText = keyWords[this.value][i];38 39 //p标签要有小手,还有高亮显示40 pObj.style.cursor = &#39;pointer&#39;;41 pObj.style.margin = &#39;5px&#39;;42 pObj.onmouseover = function () {43 this.style.backgroundColor = &#39;red&#39;;44 };45 pObj.onmouseout = function () {46 this.style.backgroundColor = &#39;&#39;;47 }48 dvObj.appendChild(pObj); //把p标签加到层中49 }50 //创建可以显示文件的标签51 52
53 54 55 }56 }57 //firefox下检测状态改变只能用oninput,且需要用addEventListener来注册事件。 58 if (/msie/i.test(navigator.userAgent)) //ie浏览器 59 {60 document.getElementById(&#39;txt&#39;).onpropertychange = handle61 }62 else {//非ie浏览器,比如Firefox 63 document.getElementById(&#39;txt&#39;).addEventListener(&input&, handle, false);64 }65 };
66 &/script&67 &/head&68 &body&69 &span id=&msg&&&/span&70 请输入搜索关键字&input type=&text& name=&name& value=&& style=&width:300height:30font-size:25 border:1px solid green& id=&txt&/&百度一下71 &/body&72 &/html& 效果展示:关于这个练习我有以下几点思索1.因为搜索热词提前被设定好,放在键值对里面,所以搜索的范围也就被限定了,这个可以再被加深,和数据库中的数据连接起来,搜索的的关键词直接从数据库中查询,这个具体怎么写我还没研究透,希望有经验的前辈可以指教。2.关于这个代码的应用我觉得可以应用在用户查询搜索上,百度搜索就是一个很好的实例3.代码毕竟是JS写的,如果用户的电脑将JS控件阻止了,效果也就不行了。以上就是搜索关键词的智能提示是怎么实现的?的详细内容,更多请关注php中文网其它相关文章!
江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。
PHP中文网出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...
点击数(111963)
ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...
点击数(110016)
《php.cn原创html5视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。
点击数(84436)
本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。
点击数(83557)
所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...
点击数(80885)
PHP开发工程师
文章总浏览数
相关视频章节PHP实现搜索附近的人 - 简书
PHP实现搜索附近的人
最近的一个项目要求根据用户当前位置的经纬度来查询该用户方圆十公里以内的人,这个功能并不是什么很有技术含量的实现(当然,我们仅仅指的是该功能本身和数据量较小的时候,并不包括长期以来其派生出来的其他问题 ),但由于种种考虑,我还是决定将其记录下来。
以后不管我们从事APP服务端开发,还是做WEB开发,可能经常会有客户要求实现这样的功能,所以我们还是要掌握其原理。
【问题的提出】
我们该如何思考这个问题 ? 可能有的小伙伴要说了:“ 既然我们已经知道了当前用户的经纬度,我们从数据库里面查询用户的经纬度,然后一一计算,筛选出所有符合条件的用户。”
我也曾想当然的这样认为,并没有考虑到数据库的感受,当你操作的是一个十万,百万级别的数据库时,这样的做法带来的问题将是灾难性的,那么我们到底该如何做呢 ?
【实现思路】
首先,我们应该这样想: 既然我们知道了用户当前位置的经纬度,又知道我们将要搜索的范围,我们可不可以计算出一个范围 ?也就是说,根据一个中心点和半径,计算出符合条件的经纬度的最大值和最小值 。
【具体实现】
那么到此,想要独立思考完成的小伙伴可以不要继续往下看了。
上面我们提到该功能的一个实现原理,接下来我们就讲解一下具体的实现步骤。
我们先声明一个函数,用作计算经纬度的范围:
* 根据经纬度和半径计算出范围
* @param string $lat 纬度
* @param String $lng 经度
* @param float $radius 半径
* @return Array 范围数组
private function calcScope($lat, $lng, $radius) {
$degree = ()/360.0;
$dpmLat = 1/$
$radiusLat = $dpmLat*$
$minLat = $lat - $radiusL
// 最小纬度
$maxLat = $lat + $radiusL
// 最大纬度
$mpdLng = $degree*cos($lat * (PI/180));
$dpmLng = 1 / $mpdL
$radiusLng = $dpmLng*$
$minLng = $lng - $radiusL
// 最小经度
$maxLng = $lng + $radiusL
// 最大经度
/** 返回范围数组 */
$scope = array(
返回的数组中包含了在 $radius 范围内,符合条件的最大最小经纬度。
既然我们已经获取到了范围,那么我们就可以开始从数据库中查找所有在这个经纬度范围内符合条件的记录:
* 根据经纬度和半径查询在此范围内的所有的电站
String $lat
String $lng
float $radius 半径
* @return Array
计算出来的结果
public function searchByLatAndLng($lat, $lng, $radius) {
$scope = $this-&calcScope($lat, $lng, $radius);
// 调用范围计算函数,获取最大最小经纬度
/** 查询经纬度在 $radius 范围内的电站的详细地址 */
$sql = 'SELECT `字段` FROM `表名` WHERE `Latitude` & '.$scope['maxLat'].' and `Latitude` & '.$scope['minLat'].' and `Longitude` & '.$scope['maxLng'].' and `Longitude` & '.$scope['minLng'];
$stmt = self::$db-&query($sql);
$res = $stmt-&fetchAll(PDO::FETCH_ASSOC);
// 获取查询结果并返回
直到现在,我们已经知道了如何计算出附近的人,但在实际需求中,我们往往需要计算出每一个人与当前中心点的实际距离。
接着,我们再来看一个方法:
* 获取两个经纬度之间的距离
string $lat1 纬一
String $lng1 经一
String $lat2 纬二
String $lng2 经二
* @return float
返回两点之间的距离
public function calcDistance($lat1, $lng1, $lat2, $lng2) {
/** 转换数据类型为 double */
$lat1 = doubleval($lat1);
$lng1 = doubleval($lng1);
$lat2 = doubleval($lat2);
$lng2 = doubleval($lng2);
/** 以下算法是 Google 出来的,与大多数经纬度计算工具结果一致 */
$theta = $lng1 - $lng2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +
cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
return ($miles * 1.609344);
我们在之前已经计算出了附近符合条件的所有人的经纬度,那么我们可以将每一个人的经纬度和当前中心点的经纬度作为参数传入该函数,最终计算出每个人符合条件的人与该中心点的距离。
为了保证程序的严谨性,我必须做出以下说明:
经纬度范围的计算方法是在百度上查找的,目前尚没有找到标准的计算工具,因此该算法无法求证,但大多数帖子基本上采用的这种计算方式。
经纬度距离的计算方式是在 Google 上查找的,计算结果与大多数计算工具结果相近。之所以在 Google 中查找,是因为我曾在百度上查找过多种计算方式,结果都不尽人意。
通过半径和经纬度计算范围时,半径的单位是m;计算距离时,得到的结果是km。因此,要注意单位变化。
编程爱好者,PHP小白
1 序: 很多新接触GIS的人员对地图投影以及坐标系统很难理解,甚至做GIS开发做了好几年的人也有这方面的疑惑,地球仪式的地图是如何变成纸上的平面地图的?平面的二维地图是如何在三维GIS里面进行展示的,因为三维地球里面的地图也是用的二维的地图瓦片,这里对投影的内容进行一下简...
因为要做一个交通仿真项目,需要用到这个地图库,但是查询官方API麻烦,而且这个地图框架的API做的用起来确实太麻烦了。。就从网上各种地方查找了一些,方便用, 大多都是复制,,见谅!! L.Map API各种类中的核心部分,用来在页面中创建地图并操纵地图。 Construct...
1.dSYM你是如何分析的? 2.多线程有哪几种?你更倾向于哪一种? 3.单例弊端? 4.如何把异步线程转换成同步任务进行单元测试? 5.介绍下App启动的完成过程? 6.比如App启动过慢,你可能想到的因素有哪些? 7.0x8badf00d表示是什么? 8.怎么防止反编译...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
今儿清晨五点半就被窗外噼里啪啦的鞭炮声炸响了,天呀,姐的睡眠很宝贵好不好,可是我再也睡不着了…顶着个黑眼圈,粗门上班去了 惯例单位周二的上午吃油饼,可能没睡好的缘故,竟然没了平时的胃口,胡乱塞了两口了事。最近业务繁忙办事的人络绎不绝,表格呀表格,计算器呀计算器一按就是...
iOS自动打包主要用xcodebuild命令, 在终端输入xcodebuild --help可以查看xcodebuild的参数。 1、下载shell脚本 github下载地址 注意:xcodebuild.sh和xxx.xcodeproj放到同一个目录下,否则会出现路径问题,...
本期看点: 1、新华社:打破刚兑是金融业一场“排雷”行动 2、周三有三只新股申购 宏观: 新华社:打破刚兑是金融业一场“排雷”行动 新华社称,长远来看,打破刚兑对维护投资者权益也有裨益。违背了“高风险高收益”投资铁律的理财产品从来就不安全,所谓“保本保收益”其实是一种“甜...
自从各种框架横空出世,Android开发从此变得快速简单,今天为大家推荐一些android实际开发需要用的框架。 1.框架介绍: 框架包含网络请求、照片加载、json解析、热修复等当前热门框架技术,适合所有人群,入门、初级的菜鸟、中级到高级。别人的框架是很好,建议大家还是看...整个搜索功能用php的JSON 数据实现
json字符串可以访问https://www.bejson.com/jsoneditoronline/,该网址可以格式化json数据,进行修改。
$s='{"all":[{"academy":"a","name":"信院","content":[{"grade":"1","class":"0","name":"大一","subject":[{"name":"英语","url":""},{"name":"单变量微积分","url":""},{"name":"多变量微积分","url":""},{"name":"线性代数","url":""},{"name":"力学与热学","url":""},{"name":"大学物理基础实验","url":""},{"name":"电路基本理论","url":""},{"name":"电路基本理论实验","url":""},{"name":"计算机程序设计","url":""},{"name":"思想道德基础与法律基础","url":""},{"name":"马克思主义基本原理","url":""},{"name":"数学分析1","url":""},{"name":"数学分析2","url":""}]},{"grade":"2","class":"0","name":"大二","subject":[{"name":"概率论与数理统计","url":""},{"name":"复变函数","url":""},{"name":"电磁学","url":""},{"name":"线性电子线路","url":""},{"name":"数字逻辑电路","url":""},{"name":"大学物理综合实验","url":""},{"name":"线性电子线路实验","url":""},{"name":"数据结构及其算法","url":""},{"name":"中国近现代史纲要","url":""},{"name":"随机过程","url":""},{"name":"光学与原子物理","url":""},{"name":"信号与系统","url":""},{"name":"微机原理与系统","url":""},{"name":"数理方程","url":""},{"name":"数字逻辑电路实验","url":""},{"name":"重要思想概论","url":""}]},{"grade":"3","class":"6","name":"大三","subject":[{"name":"电磁场理论","url":""},{"name":"现代通信原理","url":""},{"name":"信息论A","url":"subject.php?subject=信息论A"}]},{"grade":"3","class":"10","name":"大三","subject":[{"name":"运筹学基础","url":""},{"name":"自动控制原理","url":""}]},{"grade":"3","class":"23","name":"大三","subject":[{"name":"信号与系统实验","url":""},{"name":"非线性电子线路","url":""}]},{"grade":"3","class":"33","name":"大三","subject":[{"name":"英语","url":""},{"name":"单变量微积分","url":""}]},{"grade":"4","class":"6","name":"大四","subject":[{"name":"英语","url":""},{"name":"单变量微积分","url":""}]},{"grade":"4","class":"10","name":"大四","subject":[{"name":"英语","url":""},{"name":"单变量微积分","url":""}]},{"grade":"4","class":"23","name":"大四","subject":[{"name":"英语","url":""},{"name":"单变量微积分","url":""}]},{"grade":"4","class":"33","name":"大四","subject":[{"name":"英语","url":""},{"name":"单变量微积分","url":""}]}]},{"academy":"b","name":"计院","content":[]},{"academy":"c","name":"数院","content":[]}]}';
这个看起来很长,但是用上面的网站编辑会很容易
$data=json_decode($s);
就得到PHP变量。
在表单中加入action="s.php" method="post"语句可以上传输入的字符串再跳转到s.php。
之后加入如下代码即可完成搜索(注:表单中input的名字为"s"):
搜索“&?php echo $_POST['s'];?&”的结果:
foreach($data-&all as $v_a)
//遍历数据
{foreach($v_a-&content as $v_b){foreach($v_b-&subject as $v_c){if(strstr($v_c-&name,$_POST['s']))
//子串匹配{echo '&li&&a href="'.$v_c-&url.'"&'.$v_a-&name.'-'.$v_b-&name.'-'.$v_c-&name.'&/a&&/li&';}}}
搜索“信”后结果
可见没有连接数据库依然完成了搜索。
php实现简易的搜索功能
好久没有看代码了,手生了,一直在盘算着转行的事;
1,今天看了一个接手的项目的源代码,发现一小段简易搜索的代码2,/**
* 简易搜索
* @param $params
基本思想:在数组中挑出一个元素(多为第一个)作为标尺,扫描一遍数组将比标尺小的元素排在标尺之前,将所有比标尺大的元素排在标尺之后,通过递归将各子序列分别划分为更小的序列直到所有的序列顺序一致。&amp...
php 实现搜索功能记录
首先 是 界面 是这样的
有4个条件,那么用户点击搜索的时候 把他的值 拼到
然后在在后端获取
/** 列表页的搜索 */
function searc...
PHP抓取百度搜索结果页面的【相关搜索词】并存储
一、百度搜索关键词【知了壳公司转让】【知了壳公司转让】搜索链接
https://www.baidu.com/s?wd=%E7%9F%A5%E4%BA%86%E5%A3%B3%E5%85%AC%E5%...
php数据库操作——获取数据查询结果
先进行连接,然后执行SQL语句,获取数据的结果集。PHP有多个函数可以获取数据的结果集,最常使用mysql_fetch_array,通过设定参数更改行数据的下标,数字索引的下标和字段名关联索引的下标。...
php实现搜索提示功能
php实现搜索提示功能
HTML代码:
{:__('视频名称')}:
1.先创建MySQL数据库:数据库名:pichai 表名:message ;
2.pichai数据库里的message表里插入 name、email 2个字段;同时插入几条数据进去。
3.建立conf...
*投诉人联系方式:
*版权证明: 只允许上传png/jpeg/jpg/gif格式的图片,且小于3M
*详细原因:
交 &em&PHP查询&/em&系统 5积分 立即下载 ...
上传大小:683KB &em&php&/em&中文分词 分享 说明:本技术用于&em&搜索&/em&引擎中文分词程序使用自建词库,存储15多万(免费版10万左右)词,未压缩词库仅1.13M 程序自动过滤...
没有更多推荐了,在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
请问类似于这种多条件搜索实现的思路,越详细越好。补充:搜索条件可自定义的 。谢谢
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
做过一样的功能,通过JS来进行GET传参过去,每点击一个类别里的值,就会通过JS传值给PHP,PHP再把值给API做处理,同一个类型的,就移除前一个,选中当前的
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
这么多条件 跟两三个条件没什么区别啊,同样的form提交查询呀。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
我觉得 楼主的意思是 如何根据条件拼接语句。
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。

我要回帖

更多关于 搜索功能如何实现 的文章

 

随机推荐