ES(elasticSearch学习笔记)

这篇具有很好参考价值的文章主要介绍了ES(elasticSearch学习笔记)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是es

es是面向文档型的数据库,一条数据在es数据库就是一个文档,和关系型数据库做一个类比:
1:es的索引类比关系型数据库的数据库,
2:es的type类比数据表(7.0版本以上删除了type这个概念),
3:es的索引下的文档document类比关系型数据库的行,新增时可以指定文档主键id,不指定会自动生成
4:es的文档中的字段类比关系关系型数据库的列。

现实生产中一般一个索引类似张表,但是一个索引下的字段还可以是一个对象,可以嵌套。
match每一次全文搜索分词是针对某一个字段的,可以是嵌套搜索,一次全文搜索不是针对整个索引的全部字段,想要同时全文搜多个字段可以一次请求中match多个字段

put请求新建索引,post/put请求新增数据,新增的数据就是一个文档,新增会有一个文档id就是索引下一个数据的主键

涉及的操作索引的增删改查和文档的增删改查

什么是倒排索引

ES(elasticSearch学习笔记)

es基本入门操作

1.安装访问
在本地es执行目录:/Users/liuqinhua/Desktop/错误/elasticsearch-7.6.2/bin
执行可执行文件:./elasticsearch
访问
ES(elasticSearch学习笔记)
2.创建索引put请求http://localhost:9200/liuqinhua(liuqinhua是索引名)
ES(elasticSearch学习笔记)

ES(elasticSearch学习笔记)

3**.get请求查看索引信息**:http://localhost:9200/索引名
例如:http://localhost:9200/liuqinhua
ES(elasticSearch学习笔记)

4.get请求查看所有的索引:http://localhost:9200/_cat/indices?v
这时候他是强制返回的内容是text格式的,所以会展示成表格的格式
ES(elasticSearch学习笔记)
5.delete请求删除索引wudonghui:http://localhost:9200/索引名
例如:http://localhost:9200/wudonghui
ES(elasticSearch学习笔记)

6.post请求给索引新增文档数据http://localhost:9200/索引名字/_doc
eg:http://localhost:9200/liuqinhua/_doc
这种会返回文档id
或者post或者put请求:http://localhost:9200/liuqinhua/_doc/自定义文档id

ES(elasticSearch学习笔记)
ES(elasticSearch学习笔记)

7.get请求查询索引的数据
查询某一个文档id内容
http://localhost:9200/索引名/_doc/文档id
例如:http://localhost:9200/liuqinhua/_doc/1001
ES(elasticSearch学习笔记)

get请求查询某一个索引下所有的文档
http://localhost:9200/索引名/_search
例如:
http://localhost:9200/liuqinhua/_search

ES(elasticSearch学习笔记)

put请求根据索引下的主键id全量修改更新某一条文档数据

格式:http://localhost:9200/索引名/_doc/数据主键id
eg:http://localhost:9200/liuqinhua/_doc/1001

ES(elasticSearch学习笔记)
ES(elasticSearch学习笔记)
put全量会把该主键id的文档数据变成这一次传入的
ES(elasticSearch学习笔记)

ES(elasticSearch学习笔记)
再更新一下:
ES(elasticSearch学习笔记)

ES(elasticSearch学习笔记)

post请求局部更新某索引下某主键文档id数据
http://localhost:9200/索引名/_update/文档主键id
eg:http://localhost:9200/liuqinhua/_update/1001
ES(elasticSearch学习笔记)
ES(elasticSearch学习笔记)

delete请求删除索引下某主键的文档
格式http://localhost:9200/索引名/_doc/文档主键id
ES(elasticSearch学习笔记)

条件查询

url拼接查询条件
格式:http://localhost:9200/liuqinhua/_search?q=文档下一级key :文档下一级value
二级的key-value是搜不出来的

ES(elasticSearch学习笔记)

查询条件放requestbody进行查询放入query-match里面
ES(elasticSearch学习笔记)
放requestbody全量查询索引下文档
ES(elasticSearch学习笔记)
分页查询
ES(elasticSearch学习笔记)

get请求http://localhost:9200/索引名/_search加reqbody里面的多条件查询和范围查询

reqbody内容

{
    "query":{
        "bool":{
            "should":[// must相当于mysql的and,should相当于or
                {
                    "match":{
                     "uname" :"forbidden"
                      //"gender":26
                  }
                },
                {
                    "match":{
                     //"uname" :"forbidden"
                      "gender":26
                  }
                }
            ],
            "filter":{//过滤
                "range":{//范围查询
                    "gender":{
                        "gt":26//gt表示大于,gender大于26岁的
                    }
                }
            }
        }
        
    }
}

查出结果

{
    "took": 23,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 4,
            "relation": "eq"
        },
        "max_score": 1.4769237,
        "hits": [
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "-rD414IBzFC3z-tJgVq3",
                "_score": 1.4769237,
                "_source": {
                    "schoolId": "2000014495",
                    "teacherUid": "100000094198",
                    "uname": "forbidden zhang",
                    "unamePing": "forbiddenzhang",
                    "gender": 28
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "-7D414IBzFC3z-tJ2Fqf",
                "_score": 1.4769237,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094198",
                    "uname": "forbidden city",
                    "unamePing": "forbiddencity",
                    "gender": 30
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "_LD714IBzFC3z-tJBFra",
                "_score": 1.4769237,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094198",
                    "uname": "forbidden city",
                    "unamePing": "forbiddencity",
                    "gender": 30
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "_bAC2IIBzFC3z-tJB1qB",
                "_score": 0.0,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094199",
                    "uname": "sijiali",
                    "unamePing": "sijiali",
                    "gender": 30
                }
            }
        ]
    }
}

全文检索和完全匹配

url同上,全文检索的核心就是分词后用了倒排,,中文一个字会分做一个词,英文字母是以空格结束当做是一个单词做分词,连续没有空格的n个数字不会分成多个词

reqbody内容:”forbidden 小“把这两个字分词把还有forbidden 和小都查了出来

{
    "query":{
        "bool":{
            "must":[// must相当于mysql的and,should相当于or
                {
                    "match":{
                     "uname" :"sijiali 华"
                      //"gender":26
                  }
                },
                {
                    "match":{
                     "unamePing" :"sijiali liu"
                      //"gender":26
                  }
                }
        
            ]
            
        }
        
    }
}
{
    "took": 146,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 9,
            "relation": "eq"
        },
        "max_score": 4.4716845,
        "hits": [
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "A7BM2IIBzFC3z-tJ01ts",
                "_score": 4.4716845,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094119",
                    "uname": "小华",
                    "unamePing": "sijiali liu",
                    "gender": 31
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "ArBI2IIBzFC3z-tJuVt_",
                "_score": 3.5823827,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094119",
                    "uname": "a sijiali 100",
                    "unamePing": "sijiali liu",
                    "gender": 31
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "BbBP2IIBzFC3z-tJA1sN",
                "_score": 3.3120766,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094119",
                    "uname": "小华",
                    "unamePing": "xiao liu hua",
                    "gender": 31
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "BLBM2IIBzFC3z-tJ41s_",
                "_score": 3.2610822,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094119",
                    "uname": "小华",
                    "unamePing": "sijiali ",
                    "gender": 31
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "_bAC2IIBzFC3z-tJB1qB",
                "_score": 2.917797,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094199",
                    "uname": "sijiali",
                    "unamePing": "sijiali",
                    "gender": 30
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "_rAv2IIBzFC3z-tJrFrx",
                "_score": 2.3717804,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094199",
                    "uname": "a sijiali b",
                    "unamePing": "sijiali",
                    "gender": 30
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "_7A12IIBzFC3z-tJBlrv",
                "_score": 2.3717804,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094119",
                    "uname": "a sijiali 9",
                    "unamePing": "sijiali",
                    "gender": 30
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "ALA32IIBzFC3z-tJa1vV",
                "_score": 2.3717804,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094119",
                    "uname": "a sijiali 99",
                    "unamePing": "sijiali",
                    "gender": 30
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "AbBE2IIBzFC3z-tJEFt2",
                "_score": 2.3717804,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094119",
                    "uname": "a sijiali 100",
                    "unamePing": "sijiali",
                    "gender": 31
                }
            }
        ]
    }
}

完全匹配:把match改为match_phrase,相当于mysql的like “%str%”

{
    "query":{
        "bool":{
            "must":[// must相当于mysql的and,should相当于or
                {
                    "match_phrase":{
                     "uname" :"sijiali"
                      //"gender":26
                  }
                }
        
            ]
            
        }
        
    }
}

返回

{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 2,
            "relation": "eq"
        },
        "max_score": 2.581265,
        "hits": [
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "_bAC2IIBzFC3z-tJB1qB",
                "_score": 2.581265,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094199",
                    "uname": "sijiali",
                    "unamePing": "sijiali",
                    "gender": 30
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "_rAv2IIBzFC3z-tJrFrx",
                "_score": 1.7744548,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094199",
                    "uname": "a sijiali b",
                    "unamePing": "sijiali",
                    "gender": 30
                }
            }
        ]
    }
}

分词中文和数字会分作两个词,字母和数字不会分做两个词

中文和数字

{
    "query":{
        "bool":{
            "must":[// must相当于mysql的and,should相当于or
                {
                    "match":{
                     "uname" :"小9"
                      //"gender":26
                  }
                }
        
            ]
            
        }
        
    }
}




返回{
    "took": 925,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 4,
            "relation": "eq"
        },
        "max_score": 2.2984395,
        "hits": [
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "_7A12IIBzFC3z-tJBlrv",
                "_score": 2.2984395,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094119",
                    "uname": "a sijiali 9",
                    "unamePing": "sijiali",
                    "gender": 30
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "8bDn14IBzFC3z-tJ1lov",
                "_score": 1.5314121,
                "_source": {
                    "schoolId": "2000014494",
                    "teacherUid": "100000094187",
                    "uname": "刘小君",
                    "unamePing": "lingweijun01",
                    "gender": 23
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "8LDm14IBzFC3z-tJDVor",
                "_score": 1.5314121,
                "_source": {
                    "schoolId": "2000014494",
                    "teacherUid": "100000094186",
                    "uname": "凌小君",
                    "unamePing": "lingweijun01",
                    "gender": 23
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "77Dl14IBzFC3z-tJ2FrK",
                "_score": 1.5314121,
                "_source": {
                    "schoolId": "2000014494",
                    "teacherUid": "100000094185",
                    "uname": "凌小军",
                    "unamePing": "lingweijun01",
                    "gender": 23
                }
            }
        ]
    }
}

英文和数字

{
    "query":{
        "bool":{
            "must":[// must相当于mysql的and,should相当于or
                {
                    "match":{
                     "uname" :"a99"
                      //"gender":26
                  }
                }
        
            ]
            
        }
        
    }
}

返回
{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 0,
            "relation": "eq"
        },
        "max_score": null,
        "hits": []
    }
}

聚合查询

聚合查询相当于mysql的group by

{
    "aggs":{//定义聚合
        "fenzu":{//年龄进行分组,给聚合起个名字
            "terms":{//聚合的类型是 term
                "field":"gender"//参与聚合的字段
                "size": 10 // 希望获取的聚合结果数量
            }

        }
    },
    "size":0//表示不返回文档数组列表0条,设置size为0,结果中不包含文档,只包含聚合结果
}



返回

{
    "took": 25,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 21,
            "relation": "eq"
        },
        "max_score": null,
        "hits": []
    },
    "aggregations": {
        "fenzu": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
                {
                    "key": 30,
                    "doc_count": 6
                },
                {
                    "key": 23,
                    "doc_count": 5
                },
                {
                    "key": 26,
                    "doc_count": 4
                },
                {
                    "key": 25,
                    "doc_count": 2
                },
                {
                    "key": 24,
                    "doc_count": 1
                },
                {
                    "key": 28,
                    "doc_count": 1
                },
                {
                    "key": 31,
                    "doc_count": 1
                }
            ]
        }
    }
}

映射关系

映射类似关系型数据库中的schema,描述了文档中有哪些字段和字段的类型,如string,data,int等。而 类型 是一组具有相关性的映射组成,然后使用"properties"来表示该类型中可能包含的字段属性。如果不设置,创建文档的时候会根据每个字段值自动匹配映射关系

可以通过mapping字段修改索引的映射关系

例如

 
put    http://ip:9200/index_name
 
{
    "mappings": {
        "properties": {
            "realname": {
                "type": "text",
                "index": true
                        },
            "username": {
                "type": "keyword",
                "index": false
                        }
        }
    }
}
 
text: 大的长文本,需要做分词,做倒排索引
 
keyword: 不会被分词,也不会被做倒排索引。做精确匹配的搜索(比如订单状态,用的微信号,qq号,手机号)
 
text , keyword 都是属于string类型。

ES 内置分词器

standard:默认分词,单词会被拆分,大小会转换为小写。
simple:按照非字母分词。大写转为小写。
whitespace:按照空格分词。忽略大小写。 s
top:去除无意义单词,比如 the / a / an / is …
keyword:不做分词。把整个文本作为一个单独的关键词

索引下字段的子字段类型,这种情况相当于是一个字段是一个对象的json字符串,但是索引的一级字段没下一层级字段,会有一个默认字段keyword

PUT index_name
{
  "mappings": {
    "properties": {
      "title": {               # 字段名称
        "type": "text",        # 字段类型
        "analyzer": "english", # 字段分词器
        "fields": {            # 多字段域,固定写法
          "std1": {             # 子字段名称
            "type": "text",    # 子字段类型
            "analyzer": "standard"  # 子字段分词器
           },
           "ziziduan":{
                "type": "text",    # 子字段类型
            "analyzer": "standard"  # 子字段分词器
           }
        }
      }
    }
  }
}

es嵌套字段是一个对象,第一层字段直接match搜不出来

content是一个对象,不是一个字符串
索引全部文档内容:
ES(elasticSearch学习笔记)

content是一个对象,不是一个字符串,直接match查嵌套字段里面内容查不出来,是一个字符串就可以,:

ES(elasticSearch学习笔记)

ES(elasticSearch学习笔记)

term查询完全匹配

进一步优化查询,因为是精准查询,不需要查询进行评分计算,只希望对文档进行包括或排除的计算,所以我们会使用 constant_score 查询以非评分模式来执行 term 查询并以一作为统一评分。推荐如下查询

参考

{
    "query":{
        "bool":{
            "should":[// must相当于mysql的and,should相当于or
                {
                    "match":{
                     "uname" :"forbidden"
                      //"gender":26
                  }
                },
                {
                    "match":{
                     //"uname" :"forbidden"
                      "gender":0
                  }
                }
            ],
            "filter":{//过滤
                "term":{
                    "gender":30
                }
            }
        }
        
    }
}


返回


{
    "took": 3,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 6,
            "relation": "eq"
        },
        "max_score": 1.8449266,
        "hits": [
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "_LD714IBzFC3z-tJBFra",
                "_score": 1.8449266,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094198",
                    "uname": "forbidden city",
                    "unamePing": "forbiddencity",
                    "gender": 30
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "-7D414IBzFC3z-tJ2Fqf",
                "_score": 1.8449266,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094198",
                    "uname": "forbidden city",
                    "unamePing": "forbiddencity",
                    "gender": 30
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "_rAv2IIBzFC3z-tJrFrx",
                "_score": 0.0,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094199",
                    "uname": "a sijiali b",
                    "unamePing": "sijiali",
                    "gender": 30
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "_bAC2IIBzFC3z-tJB1qB",
                "_score": 0.0,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094199",
                    "uname": "sijiali",
                    "unamePing": "sijiali",
                    "gender": 30
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "_7A12IIBzFC3z-tJBlrv",
                "_score": 0.0,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094119",
                    "uname": "a sijiali 9",
                    "unamePing": "sijiali",
                    "gender": 30
                }
            },
            {
                "_index": "user",
                "_type": "_doc",
                "_id": "ALA32IIBzFC3z-tJa1vV",
                "_score": 0.0,
                "_source": {
                    "schoolId": "2000014485",
                    "teacherUid": "100000094119",
                    "uname": "a sijiali 99",
                    "unamePing": "sijiali",
                    "gender": 30
                }
            }
        ]
    }
}

goland接入ES的api

配置

elastic:
  zlwenxue-cli:
    service: zlwenxue-cli
    addr: "http://127.0.0.1:9200/"
    username: "liuqinhua" #电脑的账号密码
    password: "123456"
    gzip: false

代码

package es

import (
	"errors"
	"github.com/gin-gonic/gin"
	"github.com/olivere/elastic"
	"reflect"
	"zlwenxue-cli/components"
	"zlwenxue-cli/helpers"
)

/**
 * @Author: liuqinhua
 * @Date: 2022/8/29 11:03 AM
 */
type User struct {
	SchoolId   string `json:"schoolId"`
	TeacherUid string `json:"teacherUid"`
	Uname      string `json:"uname"`
	UnamePing  string `json:"unamePing"`
	Gender     int    `json:"gender"`
}

func AddUserEs(ctx *gin.Context, record *User) (id string, err error) {
	if record == nil {
		return "", errors.New("插入的数据为空")
	}
	responseBody, err := helpers.ElasticClient.Index().Index("user").BodyJson(record).Do(ctx)
	if err != nil {
		return "", components.ErrorEsInsert.Wrap(err)
	}
	return responseBody.Id, err
}

func BoolQueryUser(ctx *gin.Context, schoolId, uname, unameping string, gender int) (userList []*User, err error) {
	boolquery := &elastic.BoolQuery{}
	if len(schoolId) > 0 {
		boolquery.Filter(elastic.NewTermQuery("schoolId", schoolId))
	}
	if gender > 0 {
		boolquery.Filter(elastic.NewTermQuery("gender", gender))
	}
	if len(unameping) > 0 { //should下面也可以完全匹配
		boolquery.Should(elastic.NewTermQuery("unamePing", unameping))
	}
	if len(uname) > 0 {
		boolquery.Should(elastic.NewMatchQuery("uname", uname))
	}
	searchByMatch, err := helpers.ElasticClient.Search("user").Query(boolquery).From(0).Size(11).Do(ctx)
	if err != nil {
		return userList, components.ErrorEsInsert.Wrap(err)
	}
	var resultType User
	for _, item := range searchByMatch.Each(reflect.TypeOf(resultType)) {
		answerHistory := item.(User)
		userList = append(userList, &answerHistory)
	}
	return
}

测试

package es

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http/httptest"
	"testing"
	"zlwenxue-cli/test"
)

/**
 * @Author: liuqinhua
 * @Date: 2022/8/29 11:04 AM
 */

func TestUserEs(t *testing.T) {
	test.Init()
	ctx, _ := gin.CreateTestContext(httptest.NewRecorder())
	//answerHistoryEs := createQueryAnswerHistoryEs()

	user1 := &User{
		SchoolId:   "111111",
		TeacherUid: "123456123",
		UnamePing:  "goland test2",
		Uname:      "goland nihao test clients 111",
	}

	id, err := AddUserEs(ctx, user1)
	if err != nil {
		t.Errorf("%+v", err)
		return
	}
	fmt.Println(id)
	fmt.Println("=========")
	list, err := BoolQueryUser(ctx, "", "goland", "", 0)
	fmt.Println(len(list))
	for _, V := range list {
		fmt.Printf("%+v", V)
		fmt.Println()
	}
}

结果

ES(elasticSearch学习笔记)

match最小匹配度

match的字段下加上minimum_should_match可以加百分数也可以加数字
表示分词后必须命中的最小词数或者百分比
参考

book索引下的所有文档

{
    "took": 809,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 5,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "BrCJ2YIBzFC3z-tJA1vB",
                "_score": 1.0,
                "_source": {
                    "bookId": "2000014485",
                    "title": "标题1",
                    "content": {
                        "duanluo": "1",
                        "zhaiyao": "摘要1",
                        "内容": "啊啊啊不不不"
                    }
                }
            },
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "CLCu2YIBzFC3z-tJvVsG",
                "_score": 1.0,
                "_source": {
                    "bookId": "2000014485",
                    "title": "标题2",
                    "alltext": "{\"duanluo\": \"2\",\"zhaiyao\": \"摘要2\",\"内容\": \"啊啊啊不不不2222\"}"
                }
            },
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "SM2e7IIBO-2eYCM19Rdj",
                "_score": 1.0,
                "_source": {
                    "bookId": "2000014486",
                    "title": "李小龙(英文名:Bruce Lee,1940年11月27日-1973年7月20日),本名李振藩,出生于美国加利福尼亚州旧金山",
                    "alltext": "1962年李小龙开办“振藩国术馆”,1967年自创截拳道,1973年7月20日,李小龙在香港逝世,年仅32岁。1979年美国洛杉矶市政府将补拍版《死亡游戏》的开映日6月8日定为“李小龙日”(7月8日为错误翻译)。1993年美国发行李小龙逝世20周年纪念钞票,好莱坞星光大道铺上李小龙纪念星徽;同年,获香港电影金像奖大会颁发“终身成就奖”。1998年11月,获中国武术协会颁发“武术电影巨星奖”。"
                }
            },
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "Sc2f7IIBO-2eYCM1bxfY",
                "_score": 1.0,
                "_source": {
                    "bookId": "2000014486",
                    "title": "周星驰(Stephen Chow),1962年6月22日出生于香港,祖籍浙江省宁波市,中国香港影视男演员、导演、编剧、制作人、商人,毕业于无线电视艺员训练班",
                    "alltext": "1980年成为丽的电视台的特约演员,从而进入演艺圈。1981年出演个人首部电视剧《IQ成熟时》。1988年将演艺事业的重心转向大银幕,并于同年出演电影处女作《捕风汉子》。1990年凭借喜剧片《一本漫画闯天涯》确立其无厘头的表演风格;同年,因其主演的喜剧动作片《赌圣》打破香港地区票房纪录而获得关注。1991年主演喜剧片《逃学威龙》,并再次打破香港地区票房纪录 [1]  。1995年凭借喜剧爱情片《大话西游》奠定其在华语影坛的地位。1999年自导自演的喜剧片《喜剧之王》获得香港电影年度票房冠军 [2]  。"
                }
            },
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "Ss2g7IIBO-2eYCM1NBeJ",
                "_score": 1.0,
                "_source": {
                    "bookId": "2000014486",
                    "title": "黄家驹(1962年6月10日—1993年6月30日),出生于中国香港,祖籍广东省台山市",
                    "alltext": "中国香港男歌手、原创音乐人、吉他手,摇滚乐队Beyond的主唱及创队成员。1983年组建Beyond乐队,担任主唱,"
                }
            }
        ]
    }
}

查询语句

{
    "query":{
        "bool":{
            "should":[// must相当于mysql的and,should相当于or
                {
                    "match":{
                     "title" :{//title是字段
                         "query":"出生于相关",//全文查询内容
                         "minimum_should_match":"60%"//是指最少匹配百分比。是指将 query 分词后的词的数量 A,要求///匹配中的词的数量b,b/a 即为正数的百分比。
                        // "minimum_should_match":"3"//是指将 query 分词后的词的数量 A,要求从 A 中最少匹配中的///词的数量 B。这里匹配中的词是:出,生,于。
                     }
                      //"gender":26
                      
                  }
                  
                }
            ]
            
        }
        
    }
}
查询结果


{
    "took": 3,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 3,
            "relation": "eq"
        },
        "max_score": 1.5160279,
        "hits": [
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "Ss2g7IIBO-2eYCM1NBeJ",
                "_score": 1.5160279,
                "_source": {
                    "bookId": "2000014486",
                    "title": "黄家驹(1962年6月10日—1993年6月30日),出生于中国香港,祖籍广东省台山市",
                    "alltext": "中国香港男歌手、原创音乐人、吉他手,摇滚乐队Beyond的主唱及创队成员。1983年组建Beyond乐队,担任主唱,"
                }
            },
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "SM2e7IIBO-2eYCM19Rdj",
                "_score": 1.3371259,
                "_source": {
                    "bookId": "2000014486",
                    "title": "李小龙(英文名:Bruce Lee,1940年11月27日-1973年7月20日),本名李振藩,出生于美国加利福尼亚州旧金山",
                    "alltext": "1962年李小龙开办“振藩国术馆”,1967年自创截拳道,1973年7月20日,李小龙在香港逝世,年仅32岁。1979年美国洛杉矶市政府将补拍版《死亡游戏》的开映日6月8日定为“李小龙日”(7月8日为错误翻译)。1993年美国发行李小龙逝世20周年纪念钞票,好莱坞星光大道铺上李小龙纪念星徽;同年,获香港电影金像奖大会颁发“终身成就奖”。1998年11月,获中国武术协会颁发“武术电影巨星奖”。"
                }
            },
            {
                "_index": "book",
                "_type": "_doc",
                "_id": "Sc2f7IIBO-2eYCM1bxfY",
                "_score": 1.3117697,
                "_source": {
                    "bookId": "2000014486",
                    "title": "周星驰(Stephen Chow),1962年6月22日出生于香港,祖籍浙江省宁波市,中国香港影视男演员、导演、编剧、制作人、商人,毕业于无线电视艺员训练班",
                    "alltext": "1980年成为丽的电视台的特约演员,从而进入演艺圈。1981年出演个人首部电视剧《IQ成熟时》。1988年将演艺事业的重心转向大银幕,并于同年出演电影处女作《捕风汉子》。1990年凭借喜剧片《一本漫画闯天涯》确立其无厘头的表演风格;同年,因其主演的喜剧动作片《赌圣》打破香港地区票房纪录而获得关注。1991年主演喜剧片《逃学威龙》,并再次打破香港地区票房纪录 [1]  。1995年凭借喜剧爱情片《大话西游》奠定其在华语影坛的地位。1999年自导自演的喜剧片《喜剧之王》获得香港电影年度票房冠军 [2]  。"
                }
            }
        ]
    }
}

goland里面api的接口演示
ES(elasticSearch学习笔记)

boost控制权重

boost控制权重实现搜索结果排名
参考文章来源地址https://www.toymoban.com/news/detail-402212.html

到了这里,关于ES(elasticSearch学习笔记)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch学习笔记-第四章 ES分片原理以及读写流程详解

    在学习ES分片原理以及读写流程之前,需要先学习一些ES的核心概念以及ES集群环境的相关知识 4.1 ES核心概念 4.1.1 索引 索引(Index)相当于MySQL中的数据库,一个索引就是一个拥有几分相似特征的文档的集合。 4.1.2 类型 类型(Type)相当于MySQL中的表,一个类型就是索引的一个逻辑上

    2024年02月06日
    浏览(62)
  • Elasticsearch(五)--ES文档的操作(上)---写入文档

    使用ES构建搜索引擎时需要经常对文档进行操作,除了简单的单条文档操作,有时还需要进行批量操作。我们这章主要学习ES文档的增删改的操作,由于涉及到的代码量会比较多,所以分为3篇文章分别说明文档的这个三个操作。那么我们对文档操作的学习除了在kibana客户端之

    2024年01月16日
    浏览(44)
  • Elasticsearch(六)--ES文档的操作(中)---修改文档

    上篇文章我们了解了ES的插入和批量插入文档的操作,分别通过ES的kibana客户端以及Java高级Rest客户端进行学习,那么本篇则进入到对文档的修改操作,同新增文档,也有更新单条文档和批量更新文档操作,但还多出一个根据条件更新文档,我们本篇均会涉及到。 在ES中更新索

    2024年02月05日
    浏览(45)
  • Elasticsearch(七)--ES文档的操作(下)---删除文档

    上篇文章我们了解了ES的修改文档的操作,也同样分别通过ES的kibana客户端以及Java高级Rest客户端进行学习,那么本篇末尾要给大家介绍的是对文档的删除操作,同新修改文档,也有删除单条文档和批量删除文档操作,根据条件删除文档,我们本篇均会涉及到。 在ES中删除文档

    2023年04月12日
    浏览(35)
  • ES Elasticsearch 五 、文档入门****

    目录 文档document介绍 手动生成id 自动生成id _source      //定制查询字段 全量替换 put 强制创建-只创建不覆盖 增加/_create 延迟删除 该状态防止磁盘写入消耗 局部更新     脚本 并发问题 文档document介绍        默认字段: _index 索引 _type 类型 _id 可以手动、自动生成 手动

    2024年02月06日
    浏览(75)
  • 【Elasticsearch学习笔记五】es常用的JAVA API、es整合SpringBoot项目中使用、利用JAVA代码操作es、RestHighLevelClient客户端对象

    目录 一、Maven项目集成Easticsearch 1)客户端对象 2)索引操作 3)文档操作 4)高级查询 二、springboot项目集成Spring Data操作Elasticsearch 1)pom文件 2)yaml 3)数据实体类 4)配置类 5)Dao数据访问对象 6)索引操作 7)文档操作 8)文档搜索 三、springboot项目集成bboss操作elasticsearch

    2023年04月09日
    浏览(51)
  • 文档存储Elasticsearch系列--1 ES介绍

    前言:Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,支持结构化文档数据的分布式存储,并提供准实时的查询,全文检索,数据聚合; 1 为什么要使用ES: ES 本身存在哪些特性使得我们放弃传统关系型数据库,ES的特点: (1)ES支持PB级别(100万G) 数据

    2024年02月13日
    浏览(36)
  • ElasticSearch第五讲 ES nested嵌套文档与父子文档处理

    在ES中,处理实体之间的关系并不像关系型存储那样明显。在关系数据库中的黄金准则 - 数据规范化,在ES中并不适用。在处理关联关系,嵌套对象和父子关联关系中,我们会讨论几种可行方案的优点和缺点。 紧接着在为可扩展性而设计中,我们会讨论ES提供的一些用来快速灵

    2024年02月02日
    浏览(44)
  • es elasticsearch 新增更新索引,新增更新文档

    先新增索引 新增映射  或者上述两步和为一步(创建索引,及创建mapping) 只能增加原有不存在的字段 创建一个全新的索引,映射包含调整后的字段或类型 将原有索引的数据迁移到新的索引 删除原有索引 将新的索引的别名设置为原来索引相同名称 创建一个 重建文档(全量

    2024年02月11日
    浏览(46)
  • 【ES】Elasticsearch核心基础概念:文档与索引

    es的核心概念主要是:index(索引)、Document(文档)、Clusters(集群)、Node(节点)与实例,下面我们先来了解一下Document与Index。 在讲解Document与Index概念之前,我们先来了解一下RESTful APIs,因为下面讲解Document和Index的时候会使用到。 当我们把es服务器启动起来之后,要怎么调用呢?

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包