1、倒排索引
ES中,将存放的数据,以一定的方式进行分词,并且将分词的内容存放到一个单独的分词库中。当用户去查询数据时,会将用户的查询关键字进行分词。然后去分词库中匹配内容,最终得到数据的id标识。根据id标识去存放数数据的位置拉取数据。
2、安装ik分词器
使用ES自带的插件安装
/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/release/download/v7.x.x/eleasticsearch-analysis-ik-7.x.x.zip
3、ES的结构
一个索引可以存在多个分片,那么就可以同时部署多个机器。每个分片都在每个服务器上存有备份,来保证高可用。
每个索引下都有type,这里注意ES5.x,一个index下可以创建多个type。ES6.x,一个index下可以创建一个Type。ES7.x,一个index下没有Type。
下图是一个索引下存在多个type的情况。
一个type下存在多个文档,一个文档下存在多个字段。
3、ES查询
term&terms查询
term的查询是代表完全匹配,搜索之前不会对你搜索的关键字进行分词,对你的关键字去文档分词库中直接匹配。
POST /example-index/example-type/_search
{
"from": 0, # limit ?
"size": 5, # limit X,?
"query":{
"term":{
"province":{
"value": "北京"
}
}
}
}
terms和term的查询机制是一样的。terms是针对一个字段包含多个值的情况使用。
term: where provine = 北京;
terms: where province = 北京 or province = 上海
POST /example-index/example-type/_search
{
"query":{
"terms":{
"province":[
"北京",
"Shanghai",
"Wuhan"
]
}
}
}
--------------
蝶恋花·庭院深深深几许
作者:欧阳修
庭院深深深几许,杨柳堆烟,帘幕无重数。玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮,门掩黄昏,无计留春住。泪眼问花花不语,乱红飞过秋千去。