IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 【随手记】PHP分词后,使用SQL字段权重排序查询 -> 正文阅读

[PHP知识库]【随手记】PHP分词后,使用SQL字段权重排序查询

应用场景

应用场景为已使用SWCS分词及SPHINX搜索引擎后,仍需要使用SQL进行单独独立字段分词。

实现效果为:记录分词后每个关键词再数据表中各字段出现的次数,并根据不同字段累加实际使用的权值。通过权值进行搜索排序。

废话不多~直接上干货!

关键代码

//如果有分词的情况下进入
if($keywords_tags){
	//增加筛选条件
   $pre_next_page_sql = "*,( ";
   //开始遍历循环判断SQL中出现的分词次数
   foreach ($keywords_tags as $tags_key => $tags_value) {
       $tags_value = str_replace('"',"",$tags_value);
       //字段A代表着数据表中的字段,后面累加的10或1为要累加的权值 可动态修改
       $pre_next_page_sql .= "IF(LOCATE('".$tags_value."',字段A) , 10, 0) + 
                      IF(LOCATE('".$tags_value."',字段B) , 1, 0) + 
                      IF(LOCATE('".$tags_value."',字段C) , 1, 0) + 
                      /*此处省略N个字段*/
                      IF(LOCATE('".$tags_value."',字段N) , 1, 0) +";
   }
   //将权值重命名为tags_weight字段
   $pre_next_page_sql .= " 1) AS tags_weight";
}

//在排序的规则处增加OrderBy
$order_by = " ORDER BY tags_weight DESC";

//最后,根据使用框架拼接SQL即可

问题思路

其中的关键重点在于使用了SQL中的 LOCATE 函数,该函数的解析为:

	LOCATE(substr,str),   LOCATE(substr,str,pos)

第一个语法返回字符串str第一次出现的子串substr的位置。

第二个语法返回第一次出现在字符串str的子串substr的位置,从位置pos开始。 substr不在str中,则返回0。

配合使用SQL中的IF判断,如果分词后的字符串出现在了字段条件中,即说明字段包含改分词,则累加对应的 权值 最后根据 tags_weight 字段倒序排序查询,即可实现该功能。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-13 17:13:58  更:2021-07-13 17:14:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:55:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码