MySQL中文模糊搜索解决方案

时间:2019-05-13 17:59:08下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《MySQL中文模糊搜索解决方案》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《MySQL中文模糊搜索解决方案》。

第一篇:MySQL中文模糊搜索解决方案

在 MySQL下,在进行中文模糊检索时,经常会返回一些与之不相关的记录,如查找 “%a%” 时,返回的可能有中文字符,却没有a字符存在。本人以前也曾遇到过类似问题,经详细阅读MySQL的Manual,发现可以有一种方法很方便的解决并得到满意的结果。例子:

希望通过“标题”对新闻库进行检索,关键字可能包含是中英文,如下SQL语句:QUOTE:

select id,title,name from achech_com.news where title like '%a%'

返回的结果,某些title字段确定带了“a”关键字,而有些则只有中文,但也随之返回在检索结果中。

解决方法,使用 BINARY 属性进行检索,如:

QUOTE:

select id,title,name from achech_com.news where binary title like '%a%'

返回的结果较之前正确,但英文字母区分大小写,故有时在检索如“Achech”及“achech”的结果是不一样的。知道了使用 BINARY 属性可以解决前面这个问题,再看看 MySQL 支持的UCASE 及 CONCAT 函数,其中 UCASE 是将英文全部转成大写,而CONCAT函数的作用是对字符进行连接,以下是我们完全解决后的SQL 语句:

QUOTE:

select id,title,name from achech_com.news

where binary ucase(title)like concat('%',ucase('a'),'%')

检索的步骤是先将属性指定为 BINARY,以精确检索结果,而被 like 的 title内容存在大小写字母的可能,故先使用 ucase 函数将字段内容全部转换成大写字母,然后再进行 like 操作,而 like 的操作使用模糊方法,使用 concat的好处是传进来的可以是直接的关键字,不需要带“%”万用符,将“'a'”直接换成你的变量,在任何语言下都万事无忧了。当然你也可以这么写:

QUOTE:

select id,title,name from achech_com.news where binary ucase(title)like ucase('%a%')

检索的结果还算满意吧,不过速度可能会因此而慢N毫秒

第二篇:PHP MySql乱码解决方案

PHP乱码?Mysql乱码?怎么解决?

PHP乱码或者mysql乱码,多半是因为没有统一编码,要解决PHP/mysql乱码,只要做到三码合一即可.所谓三码,是指文件编码,页面编码声明和数据库字符集,要使用相同的编码,如全部为utf-8.怎么做到三码合一?下面以utf-8为例,说明如何统一编码.1.网页文件编码保存为utf-8无BOM

记事本,保存文件的时候选择“编码”为utf-8

editPlus,保存时选择“encoding”为utf-8

UEStudio保存时选择“格式”为utf-8无BOM

2.PHP页面内部使用header('Content-type : text/html;Charset=UTF-8');声明页面编码为utf-8

在html头部写入来声明页面编码为utf-8

3.PHP页面中连接数据库服务器后执行sql查询前使用以下代码先将字符集设置为utf-8 mysql_query('SET NAMES utf8');[或mysqli,具体代码这里不再写了]

4.创建数据表的时候将默认编码设置为utf8,将字符校对(callate)设置为utf8_general_ci CREATE TABLE IF NOT EXISTS `name`(....代码....)ENGINE InnoDB DEFAULT CHARSET utf8 COLLATE utf8_general_ci

做到这四点,相信你的网页和数据库不会再乱码.

第三篇:搜索关联词解决方案

想找到一个好的同义词解决方案,在javaeye搜此类信息也求不到,后来发了个提问贴也只有浏览数而无回复,不知道这是什么原因,搜索关联词解决方案。

所谓近义词、关联词检索不外乎以下三种形式:

1.类似google suggest,用户输入关键字后自动提示功能。

2.假如“奥运会”的关联词是“北京”,用户输入“奥运会”搜索时,将“奥运会”的搜索结果以及“北京”的搜索结果都搜出来。

3.用户输入“奥运会”搜索,只显示“奥运会”的结果,它的关联词在结果集的底端用“相关搜索”的形式提示给用户。

这三种方式中看似2和3是类似的,其实还是有些很大区别的,我个人认为在实际的应用中,第3种方式是最多见的。

先说说第1种方式

google suggest的在网上可以搜到完整的解决方案,跟我此前想的一样。

建一个用来存储关键字的表

例如:

Sql代码

create tableKEYS(ITEM_ID varcha2(50)not null,SEARCH_KEY varchar2(100),);SEARCH_KEY里存储一些检索的关键字,如“奥运”,“奥运会”,“北京奥运会”等.当用户在文本框敲入时,使用AJAX将当前文本框的内容发到Action,进行下面类似的操作

Java代码

String key = request.getparameter(“inputValue”);String sql = “select * from KEYS as k where k.SEARCH_KEY like '%key%'”;这个办法也就是把当前文本框中的字放到数据库中做模糊查询,比如用户输入“奥”这个字,会从搜出所有包含“奥”字的词,然后将这些词包装好,发回至页面,页面上用JS画出下拉框,将这些包含“奥”字的词填入就可以了。

google做的是右边匹配,即是用的 like 'key%' ,输入“奥”字,会出现所有以“奥”字开头的词的提示。

大家应该注意到google suggest的提示词的最后面都写有“约XXXXX条记录”,我现在唯一能想到的解决方案是,当我们在Action中拿到匹配的词之后,将匹配的词搜索一次即可得出具体记录的条数,其实这样也不耗多少资源。

第2种方式

将关键词和关键词所联的词的结果都搜出来

我个人认为这个功能在实际的应用中只需用到其5%就可以了,因为在用户体验方面考虑,我们必须保障搜索结果的质量。关键词的近义词可以在结果页的底端提示给用户,也就是我上边说到的第3种方式。

我所说的只需用到5%的意思是只需为少数的、必须转义的词实现这样的功能

比如搜索“China”,那么“中国”这个词的结果肯定得出现在结果集里,还有比如搜索“08”,那么“2008”的结果也得出现在结果集里,这些都是一些特定情况,其它的词没必要做成这样,只需做提示即可。

现在中文检索一般都是基于词库的检索,实现第2种方式这个功能必须将之前的词库以及分词算法进行修改。

一般的方法是在词库中把同义词写成一行,如将“中国 China”写在同一行,然后修改Token算法(这个大家可以去研究一下,我现在使用的Analyzer包是公司商业上的伙伴提供的测试包,这个测试包已经可以满足很大一部分需求了,我还不知道能不能共享)

其实原理是在索引时将原词和原词的近义词一起索引

具体给大家个例子

有这样一句话----“中国是世界上人口最多的国家”

如果没有为其做同义词,大家可能会索引成这样

如果做了同义词,会索引成即是说在索引时就已经将“中国”这个词存成了,搜索时无论搜“中国”或是“China”都可以搜到这句话,规划方案《搜索关联词解决方案》。

其实这个功能相当大一部分是依赖第三方的jar包,说来说去也没多大意思,并且大多数情况下我们需要的并不同这种功能,而是更人性化的查询提示的功能,也就是第3种方式。

第3种方式

这种方式是我在原有的系统上改进完成的原有的系统是 compass + paoding + lucene

由于我不太熟compass的搜索,所以我还是采用的lucene搜索。相信大家对这种搭配的全文检索已经非常熟悉了,paoding的词库是可以自己配置的。

那么怎样在原有的基础实现关键词提示功能呢???

我的做法是这样的,我按照paoding词库的特点新建了一个mydictionary.dic文件放在classpath下,里面的内容大致如下。

第1行:奥运会北京2008第29届奥运会

第2行:中国 China 中华人民共和国 中国电信 中国人民银行

........然后在服务器启动时,将mydictionary.dic这个文件中的文字一行行读入,分别做索引

Java代码

InputStream fi = this.getClass().getClassLoader().getResourceAsStream(“mydictionary.dic”);File indexDir = new File(“d:tong”);Analyzer luceneAnalyzer = new StandardAnalyzer();IndexWriter indexWriter = new IndexWriter(indexDir, luceneAnalyzer,true);BufferedReader reader = new BufferedReader(new InputStreamReader(fi, “UTF-8”));String line = new String();while((line = reader.readLine())!= null){Document document = new Document();Field FieldName = new Field(“line”, line,Field.Store.YES, Field.Index.TOKENIZED);document.add(FieldName);indexWriter.addDocument(document);}indexWriter.optimize();indexWriter.close();reader.close();

在搜索时,对用户输入的关键字正常搜索出结果后,对关键字进行第二次搜索,搜的是同义词的索引,得到的结果按空格分开,即可得到所有同义词,然后将同义词发送至页面即可。

Java代码

public List getTongYi(String searchword)throws Exception{List list = new ArrayList();Hits hits = null;String queryString = searchword;Query query = null;String result = “";IndexSearcher searcher = new IndexSearcher(”d:tong“);Analyzer analyzer = new StandardAnalyzer();Queryparser qp = new Queryparser(”line“, analyzer);query = qp.parse(queryString);if(searcher!= null){hits = searcher.search(query);for(int i=0;i

第四篇:远程客户端连接MysqL数据库太慢解决方案

远程客户端连接MysqL数据库太慢解决方案

远程客户端连接MysqL数据库太慢解决方案

局域网客户端访问mysql 连接慢问题解决。

cd /etc/mysql

vi my.conf

[mysqld]

skip-name-resolve

此选项禁用了DNS解析,连接速度会快很多。

不过,这样的话就不能在MySQL的授权表中使用

主机名了而只能用ip格式。

第五篇:中文参数乱码问题解决方案

问题1:

在使用tomcat服务器时,如在跳转路径中传递中文参数会出现乱码现向!如:以

两种方式提交的变量flag在LoginServlet中用request.getParameter(“flag”);时就会出现乱码问题。

解决:在tomcat/conf/servlet.Xml中 加入一段代码:

debug=“0” connectionTimeout=“20000”

disableUploadTimeout=“true” URIEncoding=“true”/>

问题2:

如果uri中转递的是参数要发送到jsp页面,则必须在接受代码的jsp页面里面还要加入代码: <% request.setCharacterEncoding(“gb2312”);%>

问题3:

在jsp页面里的代码修正:

<%@ page language=“java” import=“java.util.*” pageEncoding=“gb2312”%> <%@ page contentType=“gb2312”%>

无标题文档

//如不注明是post方式则默认是get方式

问题4:

在servlet中的代码修正

在doPost方法里面最上面的位置加上如下代码:

response.setCharacterEncoding(“gb2312”);

request.setCharacterEncoding(“gb2312”);

下载MySQL中文模糊搜索解决方案word格式文档
下载MySQL中文模糊搜索解决方案.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    基于DM368的视频解决方案--中文终稿(范文)

    基于DM368的视频解决方案--中文终稿 码效率DM368上的智能编解码器技术可将给定感知质量的编码比特率降低5倍从而可减轻网络带宽的负荷减少对高成本存储的需求支持UVC/UACUSB......

    2012淘宝搜索排名规则以及防举报解决方案(最终5篇)

    一、淘宝搜索排名规则 提供淘宝卖家的防止举报解决方案。淘宝防举报有哪几种方法,淘宝防举报方法是怎样的,防止淘宝举报的软件还有淘宝防举报代码等等这些问题都在这里可以得......

    关于win8输入法多一个中文简体解决方案

    关于win8输入法多一个中文简体解决方案 今天自己电脑被同事莫名其妙的用后多了一个输入法怎么也删除不了,在网上也没有可解决的方案, 各种摸索终于找到了终极解决方案。 第一......