当前位置: 首页 > news >正文

elasticsearch的基本用法

GET _search
{"query": {"match_all": {}}
}GET _cat/indices#保存数据带id,put必须要带id
PUT customer/external/1
{"name":"杰克"
}POST customer/external
{"name":"张三"
}#查询数据  哪个索引下,哪个类型,哪条数据(id)GET customer/external/1#查询全部
GET customer/external/_search# "_seq_no" 和_primary_term可以用来控制并发(乐观锁)
#例如两个线程同时修改customer/external/1的数据
PUT customer/external/1?if_seq_no=1&if_primary_term=1
{"name":"杰克1"
}PUT customer/external/1?if_seq_no=1&if_primary_term=1
{"name":"杰克2"
}#更新内容(会对比原数据,如果更新的数据跟原来的数据一样,那么返回"result" : "noop")
POST customer/external/1/_update
{"doc":{"name":"杰克更新doc"}
}#更新内容,不会检查原来的数据,每次都更新
POST customer/external/1
{"name":"杰克post更新"
}
PUT customer/external/1
{"name":"杰克put更新"
}#删除文档索引
DELETE customer/external/1#bulk 批量api
#语法格式
#{action:{metadata}}
#{request body}
POST customer/external/_bulk
{"index":{"_id":"1"}}
{"name":"杰克bulk"}
{"index":{"_id":"2"}}
{"name":"2号杰克"}#导入es官方的测试数据
GET bank/account/_search
POST bank/account/_bulk
{"index":{"_id":"1"}}
{"account_number":1,"balance":39225,"firstname":"Amber","lastname":"Duke","age":32,"gender":"M","address":"880 Holmes Lane","employer":"Pyrami","email":"amberduke@pyrami.com","city":"Brogan","state":"IL"}
{"index":{"_id":"6"}}
{"account_number":6,"balance":5686,"firstname":"Hattie","lastname":"Bond","age":36,"gender":"M","address":"671 Bristol Street","employer":"Netagy","email":"hattiebond@netagy.com","city":"Dante","state":"TN"}
{"index":{"_id":"13"}}
#.....#查询bank索引下的全部,条件q=*(所有),排序根据account_number降序
GET bank/_search?q=*&sort=account_number:asc#另一种方式query DSL
GET bank/_search
{"query": {"match_all": {}},"sort": [{"account_number": "asc"}]
}#从第一条记录,取两条
GET bank/_search
{"query": {"match_all": {}},"sort": [{"account_number": "asc"}],"from": 0,"size": 2
}#查询返回的字段_source,("lastname","age","email")
GET bank/_search
{"query": {"match_all": {}},"sort": [{"account_number": {"order": "desc"}}],"from": 0,"size": 2,"_source": ["lastname","age","email"]
}#查询匹配的值mach,匹配名字为Barron的数据。(mach相当于模糊查询)
GET bank/_search
{"query": {"match": {"lastname": "Barron"}}
}#匹配完整的,不会分词
GET bank/_search
{"query": {"match_phrase": {"lastname": "Bond"}}
}#多字段匹配(email或者address匹配mill的都查询出)
GET bank/_search
{"query": {"multi_match": {"query": "mill","fields": ["email","address"]}}
}#复合查询bool(must必须满足才行)匹配gender为M和address为mill的
GET bank/_search
{"query": {"bool": {"must": [{"match": {"gender": "M"}},{"match": {"address": "mill"}}]}}
}#must_not 必须不匹配
GET bank/_search
{"query": {"bool": {"must": [{"match": {"gender": "M"}}],"must_not": [{"match": {"address": "mill"}}]}}
}#should 应该匹配 可以匹配 可以不匹配 匹配最好 可以加分 不匹配也没事 相当于加分项
GET bank/_search
{"query": {"bool": {"must": [{"match": {"gender": "M"}}],"must_not": [{"match": {"address": "mill"}}],"should": [{"match": {"address": "647"}}]}}
}#查询年龄范围 大于等于18小于等于20
GET bank/_search
{"query": {"bool": {"must": [{"range": {"age": {"gte": 18,"lte": 20}}},{"match": {"address": "647"}}]}}
}#结果过滤 filter 不提供相关性得分
GET bank/_search
{"query": {"bool": {"must": [{"range": {"age": {"gte": 18}}}],"filter": {"range": {"age": {"gte": 18,"lte": 20}}}}}
}#term检索精确字段  非文本字段 
GET bank/_search
{"query": {"term": {"balance": {"value": "39868"}}}
}#聚合函数-搜索address中包含mill的所有人的年龄分布及平均年龄
GET bank/_search
{"query": {"match": {"address": "mill"}},"aggs": {"ageAGG": {"terms": {"field": "age","size": 10}}}
}#再聚合一个平均年龄
GET bank/_search
{"query": {"match": {"address": "mill"}},"aggs": {"ageAGG": {"terms": {"field": "age","size": 10}},"ageAvg":{"avg": {"field": "age"}}}
}#这里的size等于0相当于只看聚合结果 数据hits不展示
GET bank/_search
{"query": {"match": {"address": "mill"}},"aggs": {"ageAGG": {"terms": {"field": "age","size": 10}},"ageAvg":{"avg": {"field": "age"}}},"size": 0
}GET bank/_search#子聚合-先按年龄进行分布 然后再在这些年龄里进行聚合每个年龄段的人的查询平均工资是多少
GET bank/_search
{"query": {"match_all": {}},"aggs": {"ageAgg": {"terms": {"field": "age","size": 10},"aggs": {"balanceAvg": {"avg": {"field": "balance"}}}}},"size": 0
}#求出age的分布情况,再这基础上再求出gender的分布情况,再求出每一个gender的平均工资是多少
GET bank/_search
{"query": {"match_all": {}},"aggs": {"ageAgg": {"terms": {"field": "age","size": 10},"aggs": {"genderAgg": {"terms": {"field": "gender.keyword","size": 10},"aggs": {"balanceAvg": {"avg": {"field": "balance"}}}}}}},"size": 0
}#查看映射
GET bank/_mapping#创建索引并且指定索引类型
PUT /my_index
{"mappings": {"properties": {"age":{"type": "integer"},"email":{"type": "keyword"},"name":{"type": "text"}}}
}#再添加映射中的新字段(index:false不需要索引)
PUT /my_index/_mapping
{"properties": {"employee": {"type": "keyword","index": false}}
}GET /my_index/_mapping
GET bank/_mapping
GET bank/_search#创建一个新的映射
PUT /newbank
{"mappings" : {"properties" : {"account_number" : {"type" : "long"},"address" : {"type" : "text"},"age" : {"type" : "integer"},"balance" : {"type" : "long"},"city" : {"type" : "keyword"},"email" : {"type" : "keyword"},"employer" : {"type" : "keyword"},"firstname" : {"type" : "text"},"gender" : {"type" : "text"},"lastname" : {"type" : "text"},"state" : {"type" : "keyword"}}}
}#修改映射(要修改只能创建新的索引,然后把数据迁移到新创建的索引)
POST _reindex
{"source": {"index": "bank","type": "account"},"dest": {"index": "newbank"}
}GET /newbank/_search#分词
POST _analyze
{"analyzer": "standard","text": "你好,我是小短腿"
}#使用ik分词器(要先装好插件)
POST _analyze
{"analyzer": "ik_smart","text": "小短腿这是我的测试项目小阿giao"
}

ik分词器安装地址:https://release.infinilabs.com/analysis-ik/stable/
#在html文件夹下面创建一个文件夹es,用来存放分词
/myproject/nginx/html/es/fenci.txt
例如:
小短腿
小阿giao

#修改es中ik分词器的配置IKAnalyzer.cfg.xml
/myproject/elasticsearch/plugins/ik/config/IKAnalyzer.cfg.xml
#设置分词器的位置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties><comment>IK Analyzer 扩展配置</comment><!--用户可以在这里配置自己的扩展字典 --><entry key="ext_dict"></entry><!--用户可以在这里配置自己的扩展停止词字典--><entry key="ext_stopwords"></entry><!--用户可以在这里配置远程扩展字典 --><entry key="remote_ext_dict">http://192.168.10.128/es/fenci.txt</entry><!--用户可以在这里配置远程扩展停止词字典--><!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
@Testvoid searchData() throws IOException {/** GET bank/_search{"query": {"match_all": {}},"aggs": {"ageAgg": {"terms": {"field": "age","size": 10},"aggs": {"genderAgg": {"terms": {"field": "gender.keyword","size": 10},"aggs": {"balanceAvg": {"avg": {"field": "balance"}}}}}}},"size": 0}**/SearchRequest searchRequest = new SearchRequest();//查询哪个索引searchRequest.indices("bank");SearchSourceBuilder builder = new SearchSourceBuilder();//查询全部条件builder.query(QueryBuilders.matchAllQuery());//聚合操作TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10).subAggregation(AggregationBuilders.terms("genderAgg").field("gender.keyword").size(10).subAggregation(AggregationBuilders.avg("balanceAvg").field("balance")));builder.aggregation(ageAgg);searchRequest.source(builder);System.out.println("检索条件:"+searchRequest.source().toString());SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println(search);SearchHit[] hits = search.getHits().getHits();for (SearchHit hit : hits) {System.out.println(hit);}}

http://www.mrgr.cn/news/55832.html

相关文章:

  • 计算不停歇,百度沧海数据湖存储加速方案 2.0 设计和实践
  • Vue+TypeScript+SpringBoot的WebSocket基础教学
  • vue 页面导出gif图片 img 导出gif 超简单~
  • Unity DOTS中的Archetype与Chunk
  • 戴尔电脑win11找不到D盘的解决办法
  • 【ios】在 SwiftUI 中实现可随时调用的加载框
  • MySQL !=NULL 与IS NOT NULL
  • 什么是内控型预付费表?内控型预付费表与预付费表的区别在哪里?
  • 90%的人都不算会网络安全,这才是真正的白帽子技术
  • 第三代加密法-维吉尼亚加密法代码实现
  • IEC104规约的秘密之十五----文件传输慢的原因
  • Task Registration Process
  • this指针—静态成员—单例模式
  • Java 基础教学:基础语法-数据类型
  • 九、基于构件的软件工程
  • Leetcode—175. 组合两个表【简单】
  • ECharts饼图-饼图自定义样式,附视频讲解与代码下载
  • LINUX1.1
  • 道可云人工智能元宇宙每日资讯|《嘉兴市推动人工智能高质量发展实施方案》发布
  • 引领未来数据库技术:探索高效可靠的PXC集群解决方案
  • mysql的各种存储引擎
  • 2025北京自动驾驶技术展览会
  • 华为OD机试 - 计算最多能观看几场演出(Python/JS/C/C++ 2024 E卷 200分)
  • 【JS】JavaScript中的undefined和null的区别
  • Vue3 + TS 百叶窗效果组件封装
  • 【小白学机器学习19】什么是统计里的定量分析