mysql 多字段模糊查询
MySQLJava
在最近的一个项目需要实现在单表中对多字段进行同一关键字的模糊查询,查了一下有点收获
Java代码
select * from table where `字段`='值' and concat(`title`,`content`) like '%关键字%'
MySQL单表多字段模糊查询解决方法
2008-11-14 09:17
MySQL单表多字段模糊查询解决方法
在最近的一个项目需要实现在单表中对多字段进行多个关键字的模糊查询,但这数个关键字并不一定都存在于某个字段
例如现有table表,其中有title,tag,description三个字段,分别记录一条资料的标题,标签和介绍。然后根据用户输入的查询请求,将输入的字串通过空格分割为多个关键字,再在这三个字段中查询包含这些关键字的记录。
可目前遇到的问题是,这些关键字是可能存在于三个字段中的任意一个或者多个,但又要求三个字段必须包含所有的关键词。如果分别对每个字段进行模糊匹配,是没法实现所需的要求,由此想到两种方法:
在插入记录的同时,将需要进行多字段模糊查询的字段合并成一个字串并加入到一个新的字段中,然后对这个新字段进行模糊查询。
使用全文检索,但是这需要用到中文分词或者将汉字转化为拼音(拆分汉字是不可行的,MySQL默认FT最小字节为4),而且并不利于今后的维护。
在网上爬了两天,对此问题的处理都没有找到满意的解决方法,最后在《MySQL权威指南》中翻到了CONCAT的使用方法,在书中的对CONCAT的描述是:
CONCAT(str1,str2,…)
返回值:由全体出入参数合并在一起而得到的字符串。只要输入的参数中有NULL值,就返回NULL。CONCAT允许只有一个输入参数的情况。
因此,前文的查询可以通过下面这个SQL查询实现
SELECT * FROM `magazine` WHERE CONCAT(`title`,`tag`,`description`) LIKE ‘%关键字%’
在最近的一个项目需要实现在单表中对多字段进行多个关键字的模糊查询,但这数个关键字并不一定都存在于某个字段,查了一下有点收获
select * from table where `字段`='值' and concat(`title`,`content`) like '%关键字%'
今天有朋友问
引用原文:
请教一个问题:
我在mysql中建一个表,三百多万条记录,大约200mb大小,简单的模糊查询就很慢,请问有什么解决办法吗??也许 col_XX 会达到20个左右.
他的SQL如下:
1
select * from table_XX where col_1 like '%条件%' or col_2 like '%条件%' or col_3 like '%条件%'or col_4 like '%条件%'
首先,需要说明的是,以上的SQL语句,在任何类型的数据库上执行都不会使用到索引,意味着逐行扫描。
数据库只能做以下:
在建好联合索引 col_1,col_2.....后,
1
select * from table_XX where col_1 like '条件%' or col_2 like '条件%' or col_3 like '条件%'or col_4 like '条件%'
在必须以col_1作为where第一个条件的前提下,以上条件能使用到索引,也就是说最前面不能用%,只能以“条件”开头.
如果一定要实现 like '%条件%' ,数据库无法做到。
以下是实现的可选方案:
使用Lucene对需要检索的字段做全文检索(再加入自己的分词组件)。通过Lucene进行搜索(搜索效果要比数据库好得多),而非数据库。
音乐检索,用户数据一段文字,要求按照歌曲名、歌手名、专辑名进行查询匹配
Query query = MultiFieldQueryParser.parse(queryString, new String[]{"track_name","artist_name","release_name"}, new StandardAnalyzer());
mysql 多字段模糊查询
MySQLJava
在最近的一个项目需要实现在单表中对多字段进行同一关键字的模糊查询,查了一下有点收获
Java代码
select * from table where `字段`='值' and concat(`title`,`content`) like '%关键字%'
MySQL单表多字段模糊查询解决方法
2008-11-14 09:17
MySQL单表多字段模糊查询解决方法
在最近的一个项目需要实现在单表中对多字段进行多个关键字的模糊查询,但这数个关键字并不一定都存在于某个字段
例如现有table表,其中有title,tag,description三个字段,分别记录一条资料的标题,标签和介绍。然后根据用户输入的查询请求,将输入的字串通过空格分割为多个关键字,再在这三个字段中查询包含这些关键字的记录。
可目前遇到的问题是,这些关键字是可能存在于三个字段中的任意一个或者多个,但又要求三个字段必须包含所有的关键词。如果分别对每个字段进行模糊匹配,是没法实现所需的要求,由此想到两种方法:
在插入记录的同时,将需要进行多字段模糊查询的字段合并成一个字串并加入到一个新的字段中,然后对这个新字段进行模糊查询。
使用全文检索,但是这需要用到中文分词或者将汉字转化为拼音(拆分汉字是不可行的,MySQL默认FT最小字节为4),而且并不利于今后的维护。
在网上爬了两天,对此问题的处理都没有找到满意的解决方法,最后在《MySQL权威指南》中翻到了CONCAT的使用方法,在书中的对CONCAT的描述是:
CONCAT(str1,str2,…)
返回值:由全体出入参数合并在一起而得到的字符串。只要输入的参数中有NULL值,就返回NULL。CONCAT允许只有一个输入参数的情况。
因此,前文的查询可以通过下面这个SQL查询实现
SELECT * FROM `magazine` WHERE CONCAT(`title`,`tag`,`description`) LIKE ‘%关键字%’
在最近的一个项目需要实现在单表中对多字段进行多个关键字的模糊查询,但这数个关键字并不一定都存在于某个字段,查了一下有点收获
select * from table where `字段`='值' and concat(`title`,`content`) like '%关键字%'
今天有朋友问
引用原文:
请教一个问题:
我在mysql中建一个表,三百多万条记录,大约200mb大小,简单的模糊查询就很慢,请问有什么解决办法吗??也许 col_XX 会达到20个左右.
他的SQL如下:
1
select * from table_XX where col_1 like '%条件%' or col_2 like '%条件%' or col_3 like '%条件%'or col_4 like '%条件%'
首先,需要说明的是,以上的SQL语句,在任何类型的数据库上执行都不会使用到索引,意味着逐行扫描。
数据库只能做以下:
在建好联合索引 col_1,col_2.....后,
1
select * from table_XX where col_1 like '条件%' or col_2 like '条件%' or col_3 like '条件%'or col_4 like '条件%'
在必须以col_1作为where第一个条件的前提下,以上条件能使用到索引,也就是说最前面不能用%,只能以“条件”开头.
如果一定要实现 like '%条件%' ,数据库无法做到。
以下是实现的可选方案:
使用Lucene对需要检索的字段做全文检索(再加入自己的分词组件)。通过Lucene进行搜索(搜索效果要比数据库好得多),而非数据库。
lucene多索引文件并行查询
博客分类: Lucene
luceneSQL.net
Lucene并行索引多目录
Lucene并行索引多目录
1、多字段搜索就是同时要一个以上的字段中的内容进行比较搜索,类似概念在SQL中就是select * from Table where a like '%query%' or b like '%query%'。
Lucene.net中的单个字段查询大家都比较熟悉,这里对字段content进行搜索
Query query = QueryParser.Parse(querystr,"content",new ChineseAnalyzer());
Hits hits = searcher.Search(query);
对多个字段查询用到一个MultiFieldQueryParser对象,该对象继承自Query,我们要对字段title,content进行搜索。
string[] fields = {"content","title"};
Query multiquery = MultiFieldQueryParser.Parse(querystr,fields,new ChineseAnalyzer());
Hits hits = searcher.Search(multiquery);
2、多索引目录就是要在多个索引目录的中进行比较搜索,类似概念在SQL中就是select * from TableA union select * from TableB。
IndexSearcher[] searchers = new IndexSearcher[2];
searchers[0] = new IndexSearcher(IndexPath0);
searchers[1] = new IndexSearcher(IndexPath1);
MultiSearcher multisearcher = new MultiSearcher(searchers);
TopDocs multitopdocs = multisearcher.Search(query, null, 1000);
这个搜索的结果可能有相同的信息,比如你有一条相同的信息在多个目录中索引,搜索的结果就会出现多次相同的信息。
还有一种搜索方式是用到ParallelMultiSearcher这个对象,它是从MulitSearcher继承而来。
ParallelMultiSearcher parallelmultisearcher = new ParallelMultiSearcher(searchers);
TopDocs paralleltopdocs = parallelmultisearcher.Search(query, null, 1000);
这个搜索是对搜索后的结果进行合并,剔除重复的信息。
音乐检索,用户数据一段文字,要求按照歌曲名、歌手名、专辑名进行查询匹配
Query query = MultiFieldQueryParser.parse(queryString, new String[]{"track_name","artist_name","release_name"}, new StandardAnalyzer());
分享到:
相关推荐
在Eclipse环境中运用java,Lucene建索引及查询关键字
NULL 博文链接:https://iamyida.iteye.com/blog/2205114
NULL 博文链接:https://iamyida.iteye.com/blog/2203575
NULL 博文链接:https://navylee.iteye.com/blog/740128
创建索引 一、创建词法分析器 二、创建索引存储目录 三、创建索引写入器 四、将内容存储到索引 关键字查询 一、创建索引存储目录读取器 二、创建索引搜索器 三、解析查询 四、获取结果
这是lucene的使用案例,实现了对word文档中的关键字检索,并将检索出的内容高亮打印出来
此资源配合《android+lucene实现全文检索并高亮关键字》使用http://download.csdn.net/detail/reality_jie/6335113
根据博客调试的程序,比较简单,英文分词和检索,希望对大家学习有帮助。
lucene3.6.1文件关键字搜索代码(附加核心包),就是一个入门级的JAVA全局文件夹搜索案例、对于初学lucene很有帮助。
使用lucene技术,实现android的本地文档资源的全文检索功能,并实现关键字高亮
使用visual studio 开发的lucene.net和盘古分词实现全文检索。并按照lucene的得分算法进行多...有点小bug,在这个字段没有关键字的时候可能会不显示数据, 如果要是只看全文检索,可以自己去掉高亮,看一下检索结果。
用到的工具 jsoup+spring+struct+DButil+mysql+lucene 可以配置采集网站的图片,包含分组统计,相同数据合并功能,主要是给群内成员来个demo,让大家有个学习的demo 小试牛刀、临时写的,莫吐槽 需要用到mysql...
lucene的查询语法事例.
用lucene3实现搜索多字段并排序功能(设置权重)
Lucene实现索引和查询的实例讲解Lucene实现索引和查询的实例讲解
使用Lucene.net进行全文查找多关键字匹配
Lucene3.0之查询处理(1):原理和查询类型 各种Query对象详解
本人测试使用,搜索mysql的数据,里面包含完整jar,在LuceneDemo05这个文件执行,数据库写好但我已经屏蔽,数据是我用写死的,你也可以开启mysql查询,这个如果你下载后不能用我吃屎,绝对不骗分
而我们可以将这两种方式结合下,每次查询都多缓存一部分的结果集,翻页的时候看看所查询的内容是不是在已经存在在缓存当中,如果已经存在了就直接拿出来,如果不存在,就进行查询后,从缓存中读出来. 比如:现在我们有一个...
lucene 做索引查询流程,来自《lucene in action》