一、
1.语法对应MYSQL
mysql 数据库---elasticSearch 索引
mysql 表 ---elasticSerach 类型
mysql 查询的出的数据 --elasticSearch 文档
2.elasticSearch --倒排索引
分词,索引,相关性得分
3.分词器
4、es的算法是根据你的匹配分数来获取。sort
二、es常用命令语法
1、保存一个数据,在那个索引下那个类型下。
post和put 都可以
post:可以不指定id
put:可以指定id
PUT customer/external/1
2 、查看所有节点
GET /_cat/nodes:查看所有节点
3、查看es健康状态
GET /_cat/health:查看 es 健康状况
4、查看主节点
GET /_cat/master:查看主节点
5、查看所有索引
GET /_cat/indices:查看所有索引
6、查询文档
GET customer/external/1
7、查询结果个参数解析
8、更新post 或者PUT
9、删除文档或者索引(没有删除类型这个操作)
DELETE customer/external/1
DELETE customer
10、检索所有信息_search
GET bank/_search
{
"took" : 81,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1000,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "bank",
"_type" : "account",
"_id" : "0",
"_score" : null,
"_source" : {
"account_number" : 0,
"balance" : 16623,
"firstname" : "Bradshaw",
"lastname" : "Mckenzie",
"age" : 29,
"gender" : "F",
"address" : "244 Columbus Place",
"employer" : "Euron",
"email" : "bradshawmckenzie@euron.com",
"city" : "Hobucken",
"state" : "CO"
},
"sort" : [
0
]
},
响应结果解释:
took - Elasticsearch 执行搜索的时间(毫秒)
time_out - 告诉我们搜索是否超时
_shards - 告诉我们多少个分片被搜索了,以及统计了成功/失败的搜索分片
hits - 搜索结果
hits.total - 搜索结果
hits.hits - 实际的搜索结果数组(默认为前 10 的文档)
sort - 结果的排序 key(键)(没有则按 score 排序)
score 和 max_score –相关性得分和最高得分(全文检索用)
11、查询json串的DSL 语法
query 定义如何查询,
match_all 查询类型【代表查询所有的所有】,es 中可以在 query 中组合非常多的查 询类型完成复杂查询 除了 query 参数之外,我们也可以传递其它的参数以改变查询结果。如 sort,size
from+size 限定,完成分页功能
sort 排序,多字段排序,会在前序字段相等时后续字段内部排序,否则以前序为准
GET bank/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"balance": {
"order": "desc"
}
}
],
"from": 5,
"size": 5,
"_source": ["balance","firstname"]
}
12、match【匹配查询】
13、match_phrase【短语匹配】
14、multi_match【多字段匹配】
15、bool【复合查询】
16、filter【结果过滤】
17、term
和
match
一样。匹配某个属性的值。
全文检索字段用
match
,
其他非
text
字段匹配用
term
。
18、aggregations(执行聚合)
19、Mapping 映射
三、代码对应操作
1、构建DSL语句
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//构建DSL语句
2、构建bool-query
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
3、must -模糊匹配
boolQuery.must(QueryBuilders.matchQuery("skuTitle",param.getKeyword()));
4、 bool-filter -按照三级分类id查询
boolQuery.filter(QueryBuilders.termQuery("catalogId",param.getCatalog3Id()));
5、 排序
sourceBuilder.sort(s[0], order);
6、分页
sourceBuilder.from((param.getPageNum()-1)*EsConstant.PRODUCT_PAGESIZE);
sourceBuilder.size(EsConstant.PRODUCT_PAGESIZE);
7、高亮
sourceBuilder.highlighter(builder);
8、聚合分析
sourceBuilder.aggregation(brand_agg);
四、dev tools
#?catalog3Id=225&keyword=华为&brandId=1&brand=2&attrs=1_5.56以上&attrs=2_白色:蓝色
#must 匹配出来的数据参与评分
#match 匹配 keyword=华 ——> 模糊匹配
#term 精确匹配 catalog3Id=225 --->=值匹配
#terms 精确匹配多个值 brandId=1&brand=2 --->= + and 值匹配
#filter 匹配出来的数据不参与评分 --->过滤
#nested 匹配嵌入式的参数字段(字段被设置为 "type" : "nested",)
#bool 组合一个多查询
#sort 匹配排序 ---->order by 排序匹配
#range 区间检索 gte:大于 lte:小于 -----> > < 匹配
#from 从某页开始 #size 查询多少个 (做分页) ----->分页匹配
#highlight 做高亮