注:本实例代码是在ES marvel插件中执行
# 初始化索引
GET http://127.0.0.1:9200/library/
{
"settings" :{
"index": {
"number_of_shards": 5,
"number_of_replicas": 1
}
}
}
# 通过GET 带上参数_settings可以获得该索引详细的配置信息
GET /library/_settings
GET /library,lebron/_settings
GET /_all/_settings
# 创建一个指定ID的索引
PUT /library/books/2
{
"title": "ES Search learn 07.",
"name": {
"first" : "Zachary",
"last": "Tong"
},
"publish_date": "2018-11-11",
"price":"35.99"
}
# 创建一个不指定ID的索引
POST /library/books/
{
"title": "ES Search learn 006.",
"name": {
"first" : "Zachary",
"last": "Tong"
},
"publish_date": "2018-11-11",
"price":"35.99"
}
# 查询数据
GET /library/books/1
GET /library/books/2
GET /library/books/AWcCiCek-RVw3Ht8UZoN
# 查询指定列数据
GET /library/books/1?_source=title
GET /library/books/1?_source=title,price
GET /library/books/1?_source
# 更新(直接覆盖的方式)
PUT /library/books/3
{
"title": "ES Search learn 07.",
"name": {
"first" : "Zachary",
"last": "Tong"
},
"publish_date": "2018-11-11",
"price":"55.99"
}
# 通过_update api 的方式单独更新想要更新的字段
POST /library/books/2/_update
{
"doc": {
"price": 10
}
}
GET /library/books/2
# 删除一个文档
DELETE /library/books/1
GET /library/books/1
# 删除type
GET /library/books
# 删除索引
GET /library
# 通过_mget获取多个文档
GET /_mget
{
"docs": [
{
"_index": "library",
"_type": "books",
"_id": 1
},
{
"_index": "library",
"_type": "books",
"_id": 2,
"_source": ["title", "price"]
}
]
}
GET /library/books/_mget
{
"ids": ["1", "2"]
}
# 多重模式
# 批量操作bulk
POST /library/books/_bulk
{ "index": {"_id": 5}}
{ "title": "java", "price": "5"}
{ "index": {"_id": 6}}
{ "title": "elasticsearch", "price": "5"}
{ "index": {"_id": 7}}
{ "title": "python", "price": "5"}
{ "index": {"_id": 8}}
{ "title": "perl", "price": "5"}
{ "index": {"_id": 9}}
{ "title": "ruby", "price": ""}
GET /library/
GET /library/books/_mget
{
"ids" : ["1", "2", "3", "5", "6", "7", "8", "9"]
}
POST /library/books/_bulk
{"delete" : { "_index": "library", "_type": "books", "_id": "3"}}
{"create": { "_index": "music", "_type": "classical", "_id": "1"}}
{"title": "Ave Verum Corpus"}
{"index": { "_index": "music", "_type": "classical"}}
{"title": "Litaniac de Venerabili Altaris Sacromento"}
{"update": { "_index": "library", "_type": "books", "_id": "2"}}
{"doc": { "price": "18"}}
GET /library/books/3
GET /library/books/_mget
{
"ids" : [ "1", "2", "3", "4", "5"]
}
GET /music/classical/_mget
{
"ids": ["1", "AWcFsZwe-RVw3Ht8UoEu"]
}
# version 版本控制
# 内部版本控制
# 版本号自增,查询指定版本号必须为当前版本号(为操作校验)
PUT /library/books/1
{
"title": "Elasticsearch: The Definitive Guide",
"name": {
"first" : "Zachary",
"last" : "Tong"
},
"publish_date" : "2018-11-12"
}
GET /library/books/1
POST /library/books/1/_update
{
"doc": {
"price": 12
}
}
POST /library/books/1/_update?version=4
{
"doc": {
"price": 12
}
}
# 外部版本控制
# 指定版本号必须大于当前版本号(为指定新的操作版本号)
PUT /library/books/1?version=5&version_type=external
{
"title": "Elasticsearch: The Definitive Guide",
"name" : {
"first": "Zachary",
"last" : "Tong"
},
"publish_date": "2018-11-12",
"price": "20"
}
GET /library/books/1
# 建立映射
POST /library2
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
},
"mappings": {
"books": {
"properties": {
"title": {"type": "string"},
"name": {"type": "string", "index": "not_analyzed"},
"publish_date": {"type": "date", "index": "not_analyzed"},
"price": {"type": "double"},
"number": {"type": "integer"}
}
}
}
}
GET /library2
# 动态映射
# 首先需要在根对象中添加"dynamic": "strict", 然后在字段对象中添加"dynamic": true, 且字段对象中的类型为object
PUT /library2
{
"mappings": {
"books": {
"dynamic": "strict",
"properties": {
"title": {"type": "string"},
"name": {"type": "string", "index": "not_analyzed"},
"publish_date": {"type": "date", "index": "not_analyzed"},
"price": {"type": "double"},
"number": {
"type": "object",
"dynamic": true
}
}
}
}
}
# 管理映射
# 获取某个索引的映射信息
GET /library/_mapping
GET /library2/_mapping
# 获取某个索引下某个type的映射信息
GET /library/_mapping/books
# 获取这个集群内所有的映射信息
GET /_all/_mapping
# 获取这个集群内某两个或多个type的映射信息
GET /_all/_mapping/books,coms
# 更新修改Mapping映射
# 很遗憾,mapping一旦建立,就不能修改现有的字段映射
# 如果要推倒现有的映射,你得重新建立一个索引,然后重新定义映 射
# 然后把之前索引里的数据导入到新建立的索引里
# ----------具体的方法----------
# 1. 给现有的索引定义一个别名,并且把现有的索引指向这个别名,运行步骤2
# 2. 运行 : PUT /现有索引/_alias/别名A
# 3. 新创建一个索引,定义好最新的映射
# 4. 将别名指向新的索引,并且取消之前索引的指向,运行步骤5
# 5. 运行:POST /_aliases
# {
# "actions": [
# { "remove": {"index": "现有索引名", "alias": "别名A"}},
# { "add": {"index": "新建索引名", "alias": "别名A"}},
# ]
# }
#
# 注:通过这几个步骤就实现了索引的平滑过度,并且是零停机的
# 删除映射
DELETE /library/books
DELETE /library/books/_mapping
DELETE /library/_mapping/books,coms
# 基本查询
# 查看测试数据
GET /library/books/_mget
{
"ids": ["1", "2", "3"]
}
# 查看library的mapping信息
GET /library/_mapping
# --------------------------
# 简单查询
# 指定index名以及type名的搜索
GET /library/books/_search?q=title:elasticsearch
# 指定index名没有type名的搜索
GET /library/_search?q=title:mongodb
# 既没有index名也没有type名的搜索
GET /_search?q=title:elasticsearch
# --------------------------
# term查询
# term查询:查询某个字段里有某个关键词的文档
GET /library/books/_search
{
"query": {
"term": {
"preview": "elasticsearch"
}
}
}
# terms查询:查询某个字段里有多个关键词的文档
# minimum_match :最小匹配集;1 说明两个关键词里最少有一个, 2 就说明文档里这两个关键词都得存在
GET /library/books/_search
{
"query": {
"terms": {
"preview": [
"elasticsearch",
"book"
]
},
"minimum_match": 1
}
}
# 控制查询返回的数量
# from 和 size
# 相当于mysql里的limit
# from : 从哪个结果开始返回, 下标从0开始
# size : 定义返回最大的结果数
GET /library/books/_search?q=title:elasticsearch
GET /library/books/_search
{
"from": 1,
"size": 2,
"query": {
"term": {
"title": "elasticsearch"
}
}
}
# 返回版本号_version
GET /library3/books/_search
{
"version": true,
"query": {
"term": {
"title": "elasticsearch"
}
}
}
# ---------------------
# match查询
# match查询可接受文字,数字日期等数据类型
# match跟term的区别是,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过 程
GET /library3/books/_search
{
"query": {
"match": {
"title": "elasticsearch"
}
}
}
# 通过match_all查询
# 查询指定索引下的所有文档
GET /library/books/_search
{
"query": {
"match_all": {}
}
}
# 通过match_phrase查询
# 短语查询,slop定义的是关键词之间隔多少未知单次
GET /library/books/_search
{
"query": {
"match_phrase": {
"preview": "elasticsearch , distributed",
"slop": 2
}
}
}
# multi_match查询
# 可以指定多个字段
# 比如查询title和preview这两个字段里面包含了Elasticsearch关键词的文档
GET /library/books/_search
{
"query": {
"multi_match": {
"query": "Elasticsearch",
"fields": ["title", "preview"]
}
}
}
POST /library/books/
{
"title": "Project code",
"preview": "use Elasticsearch."
}
# --------------------
# 指定返回的字段
# 注意只能返回store为yes的字段
GET /library/books/_search
{
"fields": ["preview"],
"query": {
"match": {
"preview": "elasticsearch"
}
}
}
# 通过partial_fields控制加载的字段
GET /library/books/_search
{
"partial_fields": {
"partial": {
"include": ["preview"],
"exclude": ["title,price"]
}
},
"query": {
"match_all": {}
}
}
# 还能加通配符
GET /library/books/_search
{
"partial_fields": {
"partial": {
"include": ["pr*"],
"exclude": ["tit*"]
}
},
"query": {
"match_all": {}
}
}
# ------------------
# 排序
# desc 降序
# asc 升序
# 注意,如果数值型加上双引号,就是字符型。排序的时候不会按照 真正的数值大小进行排序,而是作为字符进行排序。
GET /library/books/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"price": {
"order": "desc"
}
}
]
}
# ------------------
# prefix 前缀匹配查询
GET /library/books/_search
{
"query": {
"prefix": {
"title": "r"
}
}
}
# ------------------
# 控制范围
# range 查询 :范围查询
# 有from, to , include_lower , include_upper, boost这些参数
# include_lower :是否包含范围的左边界,默认是true
# include_upper :是否包含范围的有边界,默认是true
GET /library/books/_search
{
"query": {
"range": {
"publish_date": {
"gte": "2018-11-12",
"lte": "2018-11-12"
}
}
}
}
GET /library/books/_search
{
"query": {
"range": {
"publish_date": {
"from": "2018-11-11",
"to": "2018-11-12",
"include_lower": true,
"include_upper": false
}
}
}
}
# ---------------------
#
# wildcard查询 :允许你使用通配符 * 和 ? 来进行查询
# * 就代表一个或多个字符
# ? 仅代表一个字符
# 注意 :这个查询很影响性能
GET /library/books/_search
{
"query": {
"wildcard": {
"title": "p*"
}
}
}
GET /library/books/_search
{
"query": {
"wildcard": {
"preview": "p?ople"
}
}
}
# ---------------------
#
# fuzzy模糊查询
# value : 查询的关键字
# boost : 设置查询的权值,默认是1.0
# min_similarity : 设置匹配的最小相似度,默认值为0.5;对于字 符串,取值为0-1(包括0和1);对于数值,取值可能大于1;对于日期型,取值为1d,2d,1m这样,1多久代表一天。
# prefix_length : 指明区分词项的共同前缀长度,默认是0
# max_expansions : 指明查询中的词项可扩展的数目,默认可以无限大
# 故意输错rudy,应为ruby
GET /library/books/_search
{
"query": {
"fuzzy": {
"title": "rudy"
}
}
}
# 故意输错rudy,应为ruby
GET /library/books/_search
{
"query": {
"fuzzy": {
"title": {
"value": "rudy",
"min_similarity": 0.5
}
}
}
}
# fuzzy_like_this 查询
# 查询得到与给定内容相似的所有文档
# fields :字段组,默认是_all
# like_text :设置关键词
# ignore_tf :设置忽略词项的频次,默认是false
# max_query_terms :指明在生成的查询中查询词项的最大数目。默认是25
# min_similarity :指明区分词项最小的相似度,默认是0.5
# prefix_length :指明分词项共同前缀的长度,默认是0
# boost :设置权值,默认是1.0
# analyze :指明用于分析给定内容的分析器
GET /library/books/_search
{
"query": {
"fuzzy_like_this": {
"fields": ["title"],
"like_text": "rudy",
"min_similarity": 0.5,
"prefix_length" : 0.2
}
}
}
# fuzzy_like_this_field 查询
# 只作用在一个字段里
# 其他与fuzzy_like_this功能一样
GET /library/books/_search
{
"query": {
"fuzzy_like_this_field": {
"title": {
"like_text": "rudy",
"min_similarity": 0.5,
"prefix_length" : 0.2
}
}
}
}
# -------------------------
# more_like_this查询
# fields :定义字段组,默认是_all
# like_text :定义要查询的关键词
# percent_terms_to_match :该参数指明一个文档必须匹配多大比例的词项才被视为相似。默认值是0.3,意思是30%的比例
# min_term_freq :该参数指明在生成的查询中查询词项的最大数目。默认为25
# stop_words :该参数指明将被忽略的单词集合
# min_doc_freq :该参数指明词项应至少在多少个文档中出现才不会被忽略。默认是5
# max_doc_freq :该参数指明出现词项的最大数目,以避免词项被忽略。默认是无限大
# min_word_len :该参数指明单个单词的最小长度,低于该值的单词将被忽略,默认是0
# max_word_len :该参数指明单个单词的最大长度,高于该值得单词将被忽略,默认是无限大
# boost_terms :该参数指明提升每个单词的权重时使用的权值。默认是1
# boost :指明提升一个查询的权值,默认是1.0
# analyer :指定用户分析的分析器
GET /library/books/_search
{
"query": {
"more_like_this": {
"fields": [
"title"
],
"like_text": "ruby",
"min_term_freq": 1,
"min_doc_freq": 1
}
}
}
# more_like_this_field 查询
# 只作用在一个字段里
# 其他与more_like_this功能一样
GET /library/books/_search
{
"query": {
"more_like_this_field": {
"title": {
"like_text": "search Lean",
"min_term_freq": 1,
"min_doc_freq": 1
}
}
}
}
————————————————
版权声明:本文为CSDN博主「lebron3v」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lebron3v/article/details/84026849