一、elasticsearch数据模型
Index:索引,由多个Document组成
Type:索引类型,6.x中仅支持一个,以后将逐渐被移除
Document:文档,由多个field组成,
Field:字段,包括字段名与字段值
二、Document管理
PUT/POST/GET/DELETE http://ip:端口/索引名称/类型/主键
创建:PUT、POST请求
查询:GET请求
删除:DELETE请求
二、创建elasticsearch数据库
PUT 库名
{
“settings”:{
“index”:{
“number_of_shard”:2,(主分片数量,默认5)
“number_of_replicas”:2(副本数量,默认1)
}
}
“mappings”:{
“表名”:{
“properties”:{
“field”:{“type”:”text”},
.......
}
}
}
}
注意:若以后聚合查询出现“无fielddata”的报错,则需要对聚合的字段加一个属性,代码为:
{
“properties”:{
"eventCategory":{
"type":"text",
"fielddata":true
}
}
}
三、查看索引映射:GET 库名/_mapping
四、删除索引:DELETE 库名
五、查询操作:
1.match_all:查询所有
GET 库名/表名/_search
{
“query”:{
“match_all”:{}
}
}
2.match:查询
GET 库名/表名/_search
{
“query”:{
“match”:{
“name”:”john kerry” (分词结果为john和kerry两个单词,只要name字段中包含有其中任意一个即可满足条件)
}
}
}
3.match_phrase:短语匹配查询
GET 库名/表名/_search
{
“query”:{
“match_phrase”:{
“name”:”john kerry” (分词结果为john和kerry两个单词,如果name字段值中依次包含所有分词,那么返回该文档)
}
}
}
4.match_phrase_prefix:短语前缀匹配查询
{
“query”:{
“match_phrase_prefix”:{
“name”:”john Ke” (最后一个分词作为前缀匹配)
}
}
}
6.multi_match:多字段匹配查询
GET 库名/表名/_search
{
“query”:{
“multi_match”:{
“query”:”john like cooking”,
“fields”:[“name”,”interest”]
}
}
}
term:词条查询:按照存储在倒排索引中的确切字词,对字段进行匹配
GET 库名/表名/_search
{
"query": {
"term":{
"name":"john"
}
}
}
terms:多词条查询:按照存储在倒排索引中的确切字词,对字段进行多词条匹配
GET 库名/表名/_search
{
"query": {
"terms":{
"name":["john","da"]
}
}
}
range:范围查询
GET 库名/表名/_search
{
"query": {
"range" : {
"yearOfBorn" : {
"gte" : 1995,
"lte" : 2000
}
}
}
}
bool:布尔查询:查询喜欢“cooking”且不在1995-2000间出生的学生
GET 库名/表名/_search
{
"query": {
"bool": {
"must": {
"match": { "interest": "cooking"} },
"must_not": {
"range": { "yearOfBorn": { "gte": 1995, "lte": 2000 }}}
}
}
}
分页查询:
1.from+size浅分页
GET stu/_search
{
"query": {
"match_all": {}
},
"size": 5,
"from": 0
}
2.scroll深分页
GET stu/_search?scroll=5m
{
"from": 0,
"size": 5,
"query": {"match_all": {}}
}
GET _search/scroll
{
"scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAANy……",
"scroll": "5m"
}
聚合查询:(求和、求平均)
{
“size”:0,
"aggs":{
"avg_age":{
"avg":{"field":"age"}
}
},
"sum_age":{
"sum":{"field":"age"}
}
}
聚合分组:
{
“aggs”:{
"abc":{
"terms":{
"field":"name"
}
}
}
}
java脚本的聚合分组类型:
{
“size”:0,
“aggs”:{
"abc":{
"event_of_people":{
"terms":{
"script":"doc['time'].values+'##'+doc['eventCategory'].values"
}
}
}
}
}