反向索引、lucene、solr前提知识说明.txt

来源:互联网 发布:淘宝整蛊零食店铺推荐 编辑:程序博客网 时间:2024/05/22 07:42
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服务器。


 
0 0
原创粉丝点击