20150422
select * from user.address like '%上海%' or user.description like '%xxx%';
sql中的like是效率很差的东西,如果写: like '%的%', 既没有用处,也效率低下。
字:英文的字母,中文的单个汉字
单词:英文的单词,中文的词(不是短语)
字-->单词-->短语-->句子, 这是级别
将文本字段理解成由单个的字组成是没有意义的,而应该将文本字段理解成单词。
user表内容如下:
physical_id,id,address
1000 ,100,上海市宝山区沪太路111号
1001 ,200,合肥市庐阳区某工业园
则可以建立如下表格:
单词, 记录物理序号(或记录id)
上海, 1000
市, 1000,2000
宝山, 1000
庐阳, 2000
区, 1000,2000
沪太, 1000
111, 1000
号, 1000
某, 2000
工业园,2000
(此表格就是所谓的索引,又叫反向索引,百度、google等搜索引擎本质上应该就是这样的方式)
从此表格中搜索:
address:1, 显然无匹配
address:海, 显然无匹配
address:工, 显然无匹配
address:上海, 匹配id为1的user
但是之前的sql的like方式:
address like '%1%' : 匹配id为1的user, 可是这有意义么?这是你想要的么?且实际情况下,这个条件将会匹配大量的记录,造成查询很慢。即这是一个查询速度很慢但却没有意义的请求。对于数据库来说这也算是陷进了。
...
lucene正是一个反向索引库, 而solr是一个以lucene为基础的搜索引擎web服务器。
select * from user.address like '%上海%' or user.description like '%xxx%';
sql中的like是效率很差的东西,如果写: like '%的%', 既没有用处,也效率低下。
字:英文的字母,中文的单个汉字
单词:英文的单词,中文的词(不是短语)
字-->单词-->短语-->句子, 这是级别
将文本字段理解成由单个的字组成是没有意义的,而应该将文本字段理解成单词。
user表内容如下:
physical_id,id,address
1000 ,100,上海市宝山区沪太路111号
1001 ,200,合肥市庐阳区某工业园
则可以建立如下表格:
单词, 记录物理序号(或记录id)
上海, 1000
市, 1000,2000
宝山, 1000
庐阳, 2000
区, 1000,2000
沪太, 1000
111, 1000
号, 1000
某, 2000
工业园,2000
(此表格就是所谓的索引,又叫反向索引,百度、google等搜索引擎本质上应该就是这样的方式)
从此表格中搜索:
address:1, 显然无匹配
address:海, 显然无匹配
address:工, 显然无匹配
address:上海, 匹配id为1的user
但是之前的sql的like方式:
address like '%1%' : 匹配id为1的user, 可是这有意义么?这是你想要的么?且实际情况下,这个条件将会匹配大量的记录,造成查询很慢。即这是一个查询速度很慢但却没有意义的请求。对于数据库来说这也算是陷进了。
...
lucene正是一个反向索引库, 而solr是一个以lucene为基础的搜索引擎web服务器。