ES基础知识
ES基础
GET /image_template_info/image_template_info/28
GET /image_template_info/image_template_info/_mapping
查看索引的mappings
GET /image_template_info/image_template_info/_search
{
"query":{
"match": {
"cn_name": "下饭"
}
}
}
基本的数据类型:
keyword 不进行切分的字符串类型 使用term查询 不能用match
text 可进行切分的字符串类型 可按照相应的切词算法对文本内容进行切分
使用match 不能用term
数值类型 long、integer、short、byte、double、float、half_float、
scaled_float和unsigned_long等
一般使用term搜索或者范围搜索
布尔类型 boolean term查询
日期类型 date strict_date_optional_time:严格的时间类型,支持yyyy-MM-dd、yyyyMMdd等
epoch_millis:从1970年1月1日0点到现在的毫秒数
复杂的数据类型:
数组类型 数组类型的字段适用于元素类型的搜索方式
数组元素类型是keyword,该类型可以适用于term搜索,则tag字段也可以适用于term搜索
对象类型 搜索用.进行指向 comment_info.properties.favourable_comment
地理类型 geo_point lat:纬度 lon:经度
POST /_bulk 批量更新文档:
POST /_bulk //批量请求
{"index":{"_index":"hotel","_id":"001"}} //指定批量请求的索引
{"title": "文雅酒店","city": "北京","price": 556.00} //写入的数据,指定文档_id
{"index":{"_index":"hotel","_id":"002"}} //指定批量请求的索引
//写入的数据,指定文档_id
{"title": "嘉怡假日酒店","city": "北京","price": 337.00}
ES搜索
ES搜索功能
指定返回的字段:
GET /hotel/_search
{
"_source": ["title","city"], //设定只返回title和city字段
"query": { //查询条件
"term": {
"city": {
"value": "北京"
}
}
}
}
SearchRequest searchRequest = new SearchRequest("hotel"); //客户端请求
//创建搜索builder
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//构建query
searchSourceBuilder.query(new TermQueryBuilder("city","北京"));
//设定希望返回的字段数组
searchSourceBuilder.fetchSource(new String[]{"title","city"} , null);
searchRequest.source(searchSourceBuilder);
结果计数:
GET /hotel/_count
{
"query": { //计数的查询条件
xxx
}
}
结果分页:
GET /hotel/_search
{
"from": 0, //设置搜索的起始位置
"size": 20, //设置搜索返回的文档个数
"query": { //搜索条件
xxx
}
}
es不适用于深翻页 from 1000 size 10
作为搜索引擎,ES更适合的场景是对数据进行搜索,而不是进行大规模的数据遍历
性能分析
GET /hotel/_search
{
"profile": "true", //打开性能剖析开关
"query": { //查询条件
"match": {
"title": "金都"
}
}
}
评分分析
GET /hotel/_explain/002
{
"query": {
"match": { //搜索酒店名称匹配“金都”的文档
"title": "金都"
}
}
}
针对不同的数据类型,ES提供了很多搜索匹配功能:既有进行完全匹配的term搜索,也有按照范围匹配的range搜索;既有进行分词匹配的match搜索,也有按照前缀匹配的suggest搜索。
查询所有文档
GET /hotel/_search
{
"_source": [ //只返回title和city字段
"title",
"city"
],
"query": {
"match_all": { //查询所有文档
"boost": 2 //设定所有文档的分值为2.0
}
}
}
布尔查询
must 必须匹配该查询条件 与
should 可以匹配该查询条件 或
must not 必须不匹配该查询条件 非
filter 必须匹配过滤条件,不进行打分计算