Elasticsearch 基本查询
发布日期:2021-07-28 08:29:42 浏览次数:1 分类:技术文章

本文共 9914 字,大约阅读时间需要 33 分钟。

注:本实例代码是在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

转载地址:https://blog.csdn.net/sinat_17775997/article/details/115873690 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Elasticsearch filter过滤查询
下一篇:Elasticsearch之查询与过滤。

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月09日 10时25分01秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

php访问父类的所有属性,php – 在父类中使用$this仅在子类中显示父类属性 2019-04-21
oracle比较强大的函数,SQL和ORACLE函数比较 2019-04-21
oracle12c order by,oracle 数据库中order by 的一些高级用法 2019-04-21
oracle8i substr,Oracle中的INSTR,NVL和SUBSTR函数的用法详解 2019-04-21
导出oracle11g的空表,轻松解决oracle11g 空表不能 exp 导出 的问题。 2019-04-21
php把整数拆分成数组,数组拆分处理(整数时的处理),该怎么处理 2019-04-21
oracle numlist,oracle sql str2numlist numtabletype 2019-04-21
php红包平均分配,红包平均分配算法 2019-04-21
linux磁盘的命令是,linux磁盘相关的命令 2019-04-21
linux服务器 缓存,Linux服务器内存使用分析及内存缓存 2019-04-21
linux查进程内存问题,关于linux 查看服务进程内存,cpu,内存占用的一些基础命令... 2019-04-21
linux英文包安装教程视频,Linux源码包安装过程讲解 2019-04-21
linux 关闭rsync服务器,linux下配置rsync服务器和实时同步 2019-04-21
linux初始化TCP服务失败,深入Linux系统追踪TCP初始化 2019-04-21
arch Linux添加源,在Arch Linux系统中使用Archlinuxcn源(清华源)的方法 2019-04-21
私人linux远程连接,Linux远程连接 - osc_5g1gl9wp的个人空间 - OSCHINA - 中文开源技术交流社区... 2019-04-21
windows文件迁移到linux,从Windows到Linux迁移之文件服务器(Samba和AD完美结合) 2019-04-21
linux下vi编辑器的命令大全,linux下VI编辑器命令大全(超级完整版) 2019-04-21
linux结构体数组的定义数组,task_struct结构体中的run_list和array域 2019-04-21
C语言极坐标转直角坐标,C语言实现直角坐标转换为极坐标的方法 2019-04-21