一、ES三个基本元素
_index:顶层单位就叫做 Index,每个Index的名字必须是小写。
_type:虚拟的逻辑分组,一个 Index 里面可以有两个逻辑相似的 Type。7.x后移除type概念,用_doc。
_id:文档的唯一标识。
es字段类型
https://www.cnblogs.com/hld123/p/15477422.html#/
二、其他核心概念
mapping:相当于schema,定义字段类型,只能加新字段,不能修改原字段类型。
doc:一个doc相当于一条记录。
field:数据类型,text(全文索引,分词,不能用于日期范围查询),keyword(不分词,只能完整搜索)
倒排索引:目录和索引页,可以比喻为正排索引和倒排索引
- 文档ID,用于获取原始信息
- 单词频率TF,记录该单词在该文档中的出现次数,用于后续相关性算分
- 位置Position,记录单词在文档中分词的位置,用于语句搜索(phrase query)
- 偏移Offset,记录单词在文档的开始和结束位置,实现高亮显示
三、ES增删改查
1、新建索引
PUT index_name
2、添加字段
PUT index_name/_mapping/elasticsearch _type
{
"properties": {
"articleNumber" : {
"type" : "keyword"
}
}
}
3、给字段添加keyword类型
PUT index_name/_mapping/elasticsearch
{
"properties": {
"bindTime": {
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
}
}
4、删除索引
DELETE index_name
5、查询表结构
GET index_name/_mapping
6、插入数据
PUT index_name/elasticsearch/249480
{
"bindMobile": "18*****141",
"bindStatus": "1"
}
7、删除部分数据
DELETE /index/type/5
POST /risk_order_his/_delete_by_query
{
"query" : {
"bool" : {
"must" : [
{
"range" : {
"orderId" : {
"to" : 10000000000,
"from":0,
"include_lower" : true,
"include_upper" : true,
"boost" : 1.0
}
}
},
{
"range" : {
"orderAddtime" : {
"from" : "2019-12-01 00:00:00",
"to" : "2020-01-01 00:00:00",
"include_lower" : true,
"include_upper" : true,
"boost" : 1.0
}
}
}
],
"boost" : 1.0
}
}
}
8、修改数据
POST /conference/event/4/_update
{
"doc": {"host": "Bob"}
}
9、查询数据
GET /索引库名/_search
{
"query":{
"查询类型":{
"查询条件":"查询条件值"
}
}
}
#这里的query代表一个查询对象,里面可以有不同的查询属性
# 查询类型:
# 例如:match_all, match,term , range 等等
# 查询条件:查询条件会根据类型的不同,写法也有差异,后面根据示例进行详细讲解
# match 全文搜索,会先对query进行分词,然后匹配
# 1. 查询所有数据
GET /movies/_search
{
"query":{
"match_all":{
}
}
}
# 2. 匹配查询(match)
# 查看title 字段有"快乐"的
GET /movies/_search
{
"query":{
"match": {
"title": "快乐"
}
}
}
# 查看所有字段有"快乐"
body = {
"query": {
"multi_match": {
"query": keyword,
}
}
}
# 查看title字段有"快"or"乐"的
GET /movies/_search
{
"query": {
"match": {
"title": {
"query": "快乐",
"analyzer": "standard"
}
}
}
}
#5. 范围
GET movies/_doc/_search
{
"query": {
"range": {
"star": {
"gte": 9.5,
"lte": 10
}
}
}
}
# 6. 复杂查询
# bool有3类查询关系,must(都满足),should(其中一个满足),must_not(都不满足)
GET movies/_doc/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"type": "喜剧"
}
},
{
"range": {
"star": {
"gte": 9.5,
"lte": 10
}
}
}
]
}
}
}
10、查询带keyword子类型的字段
GET index_name/_search
{
"query":{
"range": {
"bindTime.keyword": {
"gte": "2010-02-07 10:30:46",
"lte": "2020-02-07 19:30:46"
}
}
}
}
四、es优化