Facebook Sharer
选择您要替换的背景颜色:
【农历新年】背景图片:
个性化设定
 注册  找回密码
查看: 2074|回复: 10
打印 上一主题 下一主题

MYSQL 中文全文搜索问题

[复制链接]

46

主题

6

好友

6456

积分

百变名嘴

Rank: 13Rank: 13Rank: 13Rank: 13

跳转到指定楼层
1#
发表于 2011-7-6 09:56 PM |只看该作者 |倒序浏览
如题, 中文不能全文搜索。

有什么solution。

看百度 基本上是说存 区位码, 然后全文搜索区位码。

问题是, 什么是区位码??




收藏收藏0

46

主题

6

好友

6456

积分

百变名嘴

Rank: 13Rank: 13Rank: 13Rank: 13

2#
发表于 2011-7-6 09:59 PM |只看该作者
回复 1# 宅男-兜着走


    EXAMPLE :

TABLE PEOPLE
_____________________________
     ID | NAME |
      1    你老爸
_____________________________


sql : SELECT * FROM people WHERE MATCH(name) AGAINTS('你' IN BOOLEAN MODE);


回复

使用道具 举报

6

主题

0

好友

397

积分

超级会员

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

3#
发表于 2011-7-7 08:01 AM |只看该作者
本帖最后由 weeming21 于 2011-7-7 08:11 AM 编辑

因为中文字都是连在一起,不像英文,每个word都用空格来分开,所以全文搜索不怎么理想
搜索例子:你老爸
数据库资料:我是你的老爸

这种情形,你用match就无法找到了,因为他会把“你老爸”当成一个字来找

所以可以把中文分词处理后再进行全文搜索
原始方法是把 你老爸 =〉分割成: 你老 老爸
但是这种方法占用空间很大
所以网上可以找到很多字典,自动分割
最理想的是 你老爸 =〉 你 老爸

这样的话就能 match ... AGAINTS('你* 老爸*' IN BOOLEAN MODE) 了

我用到dede的字典不错,你不妨搜索看看  “dedecms 分词”


回复

使用道具 举报

31

主题

0

好友

1228

积分

黄金长老

Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8

4#
发表于 2011-7-7 10:45 AM |只看该作者
我的 SQL search 都是用 like 的不是用 match,中文是没问题,你可以试试。
  1. SELECT * FROM table WHERE column LIKE '*word*'
复制代码


回复

使用道具 举报

6

主题

0

好友

397

积分

超级会员

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

5#
发表于 2011-7-7 12:11 PM |只看该作者
回复 4# ~Zero

不管是match或like,如果搜索一段文字,没有分词,返回的结果就很少

搜索 “新山电脑店” 如果没有分词,直接带进like query,那么 "新山的电脑店" 这行数据就找不到了


回复

使用道具 举报

31

主题

0

好友

1228

积分

黄金长老

Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8

6#
发表于 2011-7-7 12:41 PM |只看该作者
回复  宅男-兜着走


    EXAMPLE :

TABLE PEOPLE
_____________________________
     ID | NA ...
宅男-兜着走 发表于 2011-7-6 09:59 PM

楼主的问题还没要到分词的那个复杂阶段,所以用 like 就可以解决了。
搜索 ‘你’ 是可以得到 ‘你老爸’ 的。


回复

使用道具 举报

46

主题

6

好友

6456

积分

百变名嘴

Rank: 13Rank: 13Rank: 13Rank: 13

7#
发表于 2011-7-7 10:27 PM |只看该作者
本帖最后由 宅男-兜着走 于 2011-7-7 10:31 PM 编辑

回复 6# ~Zero


    也许我的example误导了你, 是酱的其实   我要做的是站内 货品搜寻。

    Table ITEM:
   id         name                   desc
_______________________________________
1            平子洋装              从日本进口, 整体长得像和服 ....



所以我要搜寻的 关键词:

“日本洋装 , 日本和服 ,  平子样装”

等字句。 因为牵涉到不同的 搜寻关键字, 复杂的模糊搜寻。 我们不知道 使用者会key 什么。
单单 LIKE %% 是不行的

或许 LIKE 搜寻 用在 MIS 类会比较合适
我不会为了能用 LIKE %% 解决的东西来开帖的

所以我需要的是
2进制分段, 区位码 来储存, 这样的话, 就能用 MATCH 来搜寻判断区位码, Scoring。 然后 Sort Scoring.

但是问题是 !!!! 我不懂怎么 切分中文字, 也不懂怎么转换区位码。 中国网站的看不懂。太乱了。


回复

使用道具 举报

46

主题

6

好友

6456

积分

百变名嘴

Rank: 13Rank: 13Rank: 13Rank: 13

8#
发表于 2011-7-7 11:14 PM |只看该作者
回复 3# weeming21


    hi ,weeming 你给的东西是我要的。
    但是还有个问题。
   
    我用了 dedecms 分词库。 比较常用的是 转换成 base64 入库,但是我不想转换成 base64  , 看起来比较长, 比较肥大的感觉。
    对于 区位码, 你了解吗?


回复

使用道具 举报

6

主题

0

好友

397

积分

超级会员

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

9#
发表于 2011-7-7 11:44 PM |只看该作者
本帖最后由 weeming21 于 2011-7-7 11:46 PM 编辑

回复 8# 宅男-兜着走

不需要转成区位码,分词后直接进 match 应该就可以了吧,不过dedecms的分词好像只支持 gbk
这就要看你站点的中文是用gbk还是utf8了

utf8 example
  1. <META http-equiv="Content-Type" content="text/html; charset=utf8" />
  2. <?php
  3. require("lib_splitword_full.php");
  4. $str = "这里是你要的分词系统";
  5. iconv( 'UTF-8', 'gb2312//IGNORE' , $str);
  6. $sp = new SplitWord();//实例化
  7. $dd =implode(" ",array_unique(explode(" ",iconv( 'gb2312', 'UTF-8//IGNORE' , $sp->SplitRMM($str)))));
  8. echo $dd;
  9. ?>
复制代码
其实市面上还有其他的分词,discuz也有一个分词,但是是live的,要connect到discuz.net去进行分词
如果你有服务器权限,或者能自定义.so,那么可以选择这个分词系统,速度快
http://www.hightman.cn/index.php?scws


回复

使用道具 举报

46

主题

6

好友

6456

积分

百变名嘴

Rank: 13Rank: 13Rank: 13Rank: 13

10#
发表于 2011-7-7 11:54 PM |只看该作者
回复 9# weeming21


    嗯 ... 基本上我没服务器权限。 所以dd 比较适合我。
   
    刚才试用了下, 要载入词库, 出来的效果是有还不错下。不过分词过程有点小慢   
    太可怕了吧


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

JBTALKS.CC |联系我们 |隐私政策 |Share

GMT+8, 2024-12-26 11:49 AM , Processed in 0.122599 second(s), 28 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

Ultra High-performance Dedicated Server powered by iCore Technology Sdn. Bhd.
Domain Registration | Web Hosting | Email Hosting | Forum Hosting | ECShop Hosting | Dedicated Server | Colocation Services
本论坛言论纯属发表者个人意见,与本论坛立场无关
Copyright © 2003-2012 JBTALKS.CC All Rights Reserved
合作联盟网站:
JBTALKS 马来西亚中文论坛 | JBTALKS我的空间 | ICORE TECHNOLOGY SDN. BHD.
回顶部