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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月09日 10时25分01秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
php访问父类的所有属性,php – 在父类中使用$this仅在子类中显示父类属性
2019-04-21
oracle比较强大的函数,SQL和ORACLE函数比较
2019-04-21
php把整数拆分成数组,数组拆分处理(整数时的处理),该怎么处理
2019-04-21
php红包平均分配,红包平均分配算法
2019-04-21
linux磁盘的命令是,linux磁盘相关的命令
2019-04-21
linux服务器 缓存,Linux服务器内存使用分析及内存缓存
2019-04-21
linux英文包安装教程视频,Linux源码包安装过程讲解
2019-04-21
linux 关闭rsync服务器,linux下配置rsync服务器和实时同步
2019-04-21
linux初始化TCP服务失败,深入Linux系统追踪TCP初始化
2019-04-21
linux下vi编辑器的命令大全,linux下VI编辑器命令大全(超级完整版)
2019-04-21
C语言极坐标转直角坐标,C语言实现直角坐标转换为极坐标的方法
2019-04-21