求PHP分词搜索按匹配数量排序方法

miencun 2015-06-09 04:39:09
首先,分词功能已做好。

比如搜索“高级PHP教程”,能提取“高级 PHP 教程”

现在要做的就是按匹配数量来排序。同时含有所有词的内容排第一、含有两个词的排第二,只有一个词的排最后

求问大神这个功能怎么实现?
...全文
319 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaikaimenba 2016-02-15
  • 打赏
  • 举报
回复
你解决了吗,我现在也想这样弄啊,求解
miencun 2015-06-10
  • 打赏
  • 举报
回复
看来分词搜索真的是个坑啊 真心感谢两位版主的热心解答
傲雪星枫 2015-06-09
  • 打赏
  • 举报
回复
你这种情况应该使用全文索引的。 可以考虑Coreseek + Sphinx 参考:http://www.cnblogs.com/yjf512/p/3581869.html
xuzuning 2015-06-09
  • 打赏
  • 举报
回复
哦,漏了 where 自己补上吧,反正毫无实际意义
miencun 2015-06-09
  • 打赏
  • 举报
回复
没有where的?似乎还是不行,不过先谢谢版本了。
xuzuning 2015-06-09
  • 打赏
  • 举报
回复
你怎么没有表述清楚呢?只是你没有感觉到其中的厉害
以你的例子,查询指令要写作
select title, word, count(*) as cnt 
from (
select title, '高级' as word from tbl_name title like '%高级%'
union all
select title, 'PHP' as word from tbl_name title like '%PHP%'
union all
select title, '教程' as word from tbl_name title like '%教程%'
) T
order by count(*) desc
miencun 2015-06-09
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
如果不使用 全文检索 的话,你的要求虽可实现,但效率极低(联合查询) 但是 mysql 的 全文检索 又不支持中文,这就需要安装第三方软件 通常安装第三方软件是需要付出些代价的 另一解决方案是预先将分词后的文章以十六进制内码方式存入数据库,在使用 mysql 的全文检索 但这需要多出至少一倍的存储空间 自己抉择吧
版主大哥,可能我没有表述清楚。 打个比方,有三个文章标题是这样的: 1、教程下载 2、高级PHP教程下载 3、PHP教程下载 我用关键词搜索:“高级PHP教程”,三个文章标题都要能出来, 排序要像下面这样: 1、高级PHP教程下载《匹配到三个关键词》 2、PHP教程下载《匹配到两个关键词》 3、教程下载《匹配到一个关键词》 求实现思路和方法
xuzuning 2015-06-09
  • 打赏
  • 举报
回复
如果不使用 全文检索 的话,你的要求虽可实现,但效率极低(联合查询) 但是 mysql 的 全文检索 又不支持中文,这就需要安装第三方软件 通常安装第三方软件是需要付出些代价的 另一解决方案是预先将分词后的文章以十六进制内码方式存入数据库,在使用 mysql 的全文检索 但这需要多出至少一倍的存储空间 自己抉择吧
安装说明: 1. 复制search 目录到网站根目录,请不要修改此文件夹的名称 2. 初次安装, 访问: 域名/search/baseline.php 例如:你的域名是www.ahuoo.com, 那么请访问 www.ahuoo.com/search/baseline.php 3. 修改代码 1.先备份网站根目录的search.php,然后用插件里面的替换掉 2.在模版中找到商品搜索页中的商品名称显示语句,有些模版在library/search_goods_list.lbi文件中,如果没有search_goods_list.lbi文件那就在search.dwt文件中。 语句如: {$goods.goods_name} 将其中的{$goods.goods_name}改为{$goods.new_goods_name} 3. 在admin\goods.php文件中找到如下代码: sys_msg($is_insert ? $_LANG['add_goods_ok'] : $_LANG['edit_goods_ok'], 0, $link); 在此代码上一行前添加如下代码: require_once ('../search/delta.php'); //ahuoo 4. 在admin\category.php文件中找到如下代码: sys_msg($_LANG['catedit_succed'], 0, $link); 在此代码上一行前添加如下代码: require_once ('../search/delta.php'); //ahuoo 4. 如果需要添加自定义关键词可访问: 域名/search/add_word.php 一般情况下是不需要的。 插件原理: Ecshop默认情况下搜索是根据数据库按搜索的字符串去匹配,不能自动根据需要去自动分词。 例如:你搜索“李宁安踏” 标题里面必须要有“李宁安踏”才能出来, 如果某个商品标题只有“李宁”是不会出来的,这样对于普通的用户是不友好的。 本插件提供的功能: 1.提供一种强大的分词搜索,用户可以不用空格某几个分词,随便打一个句子就可以搜索出对应的结果 2.可以自定义分词。 3.搜索结果自动按照相关度排序,相关度越相关,越排在最前面。 插件为试用版,如果正式使用可以联系作者购买,当前只索引了商品的标题和分类信息,如果需要索引商品详情可以定制化开发,shopex也会有对应的版本。 插件作者 :阿虎 QQ:1976468723 演示地址: 前台:http://ahuoo.com/ec/search.php?encode=YTo0OntzOjg6ImNhdGVnb3J5IjtzOjE6IjAiO3M6ODoia2V5d29yZHMiO3M6MTI6IuiBlOmAmuS4ieaYnyI7czoxMDoiaW1hZ2VGaWVsZCI7czowOiIiO3M6MTg6InNlYXJjaF9lbmNvZGVfdGltZSI7aToxNDQ5MDYxNTAzO30= 后台: http://ahuoo.com/ec/admin 用户名/密码:test/test123

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧