ElasticSearch的常用方法
关键词
cluster 集群
shards 索引分片
replicas 索引的副本
recovery 数据重新分布
gateway 索引的持久化方式
Transport 交互方式http\或者tcp
ElasticSearch 在建立倒排索引的时候,遵循一个normalization 规则,就是对一些单词进行处理,如单复数 意义相近 大小写的搜索 等等。
分词器的使用。分词分为三部分:分词(预处理)的特殊字符的转化 分词 标准化 。
ElasticSearch 分片就是讲索引下面的数据进行分片,数据平分到某个分片上面。
ElasticSearch 中文档的版本号更新数据之后,会自动+1 _version,修改的时候还可以加上版本号,进行多线程的判定。
分词器:
standard :(默认的) 会将词汇转化为小写 并去除停用词标点符号,支持中文采用的方式是单字切片。
simple :首先通过非字母进行分割,然后转化为小写,会去掉数字类型的字符。
whitespace :仅仅是去除空格
language:特定语言的分词器,不支持中文。
analysis-ik :中文分词器 下面分为两种 ik_max_word 是尽可能多的分词 ik_smart 粗略的分词
常用的方法
测试分词的分词结果
GET _analyze?pretty
{
"analyzer": "ik_smart",
"text": "幽鬼极寒幽魂"
}
创建索引
//创建索引
PUT /indexname/ //索引名称
{
"settings":{ "index":{
"number_of_shards":10, //分片数量 每个最好容量不超过30G
"number_of_replicas":1 //分片的副本数量 防止索引出现异常
} }
} //查询索引的配置
GET /indexname/_settings //查看所有索引的配置
GET /_all/_settings
添加数据
//添加数据 1 为id 若果指定id就用PUT 如果不指定id用自主生成的就用POST
PUT /indexname/user/1
{
"name":"幽鬼",
"age":12,
"content":"一只行走在夜间的小鬼!"
}
查询数据
//根据id进行查询
GET /indexname/user/1 //返回部分结果的查询
GET /indexname/user/1?_source=age,name //排序查询
GET /indexname/user/_search
{
"query":{
"match_phrase": {
"name": "wo shi"
}
},
"sort":[{
"age":{
"order":"asc"
}
}]
}
//查询所有
GET /indexname/user/_search
{
"query":{
"match_all":{}
}
}
//匹配查询(具有分词的特性)
GET /indexname/user/_search
{
"query":{
"match":{"name":1}
}
}
//分页
GET /indexname/user/_search
{
"version":true,
"from": 0,
"size": 2,
"query":{
"terms":{"name":["1","wo"]}
}
}
//查询不进行分词
GET /indexname/user/_search
{
"query":{
"term": {
"name": "wo"
}
}
}
//匹配多个
GET /indexname/user/_search
{
"query":{
"terms": {
"name": ["wo","1"]
}
}
}
//显示版本
GET /indexname/user/_search
{
"version":true,
"from": 0,
"size": 2,
"query":{
"terms":{"name":["1","wo"]}
}
}
//匹配多个字段
GET /indexname/user/_search
{
"query":{
"multi_match": {
"query": "1",
"fields": ["name","content"]
}
}
}
//范围查询
GET /indexname/user/_search
{
"query":{
"range": {
"birthday": {
"from":"2018-12-10",
"to":"2018-12-11"
}
}
}
}
//日期或者数字通用的
GET /indexname/user/_search
{
"query":{
"range": {
"birthday": {
"gte": "2018-12-10",
"lte": "2018-12-11"
}
}
}
}
//日期格式上下是否查询
GET /indexname/user/_search
{
"query":{
"range": {
"birthday": {
"gte": "2018-12-11",
"lte": "2018-12-12",
"include_lower":true, //下是否查询
"include_upper":true //上是否查询
}
}
}
}
//使用通配符进行查询 *任意数量 ?一个字符
GET /indexname/user/_search
{
"query":{
"wildcard":{"name":"1*"}
}
}
//模糊查询 (相似的查询出来)
GET /indexname/user/_search
{
"query":{
"fuzzy":{"name":"1"}
}
}
//高亮显示
GET /indexname/user/_search
{
"query":{
"fuzzy":{"name":"1"}
},
"highlight":{
"fields": {"name":{}}
}
}
//过滤条件的使用(具有缓存的作用)
GET indexname/user/_search
{
"query":{
"bool": {
"filter":[
{"term":{"age":12}}
]
}
}
}
//or and not 的查询
GET indexname/user/_search
{
"query":{
"bool": {
"should":[ //相当于or
{"term":{"age":12}}
],
"must":[ //相当于and
{"term":{"age":12}}
],
"must_not":[ //相当于not
{"term":{"age":12}}
]
}
}
}
//聚合查询
GET indexname/user/_search
{
"aggs": {
"ageSum": {
"sum": {
"field": "age"
}
}
}
}
//只显示聚合的结果 cardinality(不相同的个数)
GET indexname/user/_search
{
"size": 0,
"aggs": {
"ageSum": {
"sum": {
"field": "age"
}
}
}
}
//分组
GET indexname/user/_search
{
"size": 0,
"aggs": {
"agegroup": {
"terms": {
"field": "age"
}
}
}
}
//聚合查询的嵌套写法(分组后,求平均年龄)
GET indexname/user/_search
{
"size": 0,
"aggs": {
"agegroup": {
"terms": {
"field": "age"
},
"aggs": {
"age_of_avg": {
"avg": {
"field": "age"
}
}
}
}
}
}
//上面加上排序的写法
GET indexname/user/_search
{
"size": 0,
"aggs": {
"agegroup": {
"terms": {
"field": "age",
"order": {
"age_of_avg": "desc"
}
},
"aggs": {
"age_of_avg": {
"avg": {
"field": "age"
}
}
}
}
}
}
更新数据
//使用put进行数据的覆盖
PUT /indexname/user/1
{
"name":"幽鬼1",
"content":"一只行走在夜间的小鬼!"
} //具体字段的修改,如果没有就进行添加 使用post
POST /indexname/user/1/_update
{
"doc": {
"name":"幽鬼",
"age":12
}
}
//还可以加上版本号进行识别 (处理多线程的问题)
POST /indexname/user/1/_update?version=5
{
"doc": {
"name":"幽鬼",
"age":121
}
}
//使用外部版本的设置,但是版本只能大于当前的版本,不能用局部_update
PUT /indexname/user/1?version=10&version_type=external
{
"name":"幽鬼1",
"content":"一只行走在夜间的小鬼!"
}
删除 使用delete
MultiGet 批量获取文本 需要指明_index _type _id 三个必须指明
GET _mget
{
"docs":[
{
"_index":"indexname",
"_type":"user",
"_id":1
},
{
"_index" : ".kibana_1",
"_type" : "doc",
"_id" : "config:6.5.0"
}
]
}
指明返回指定结果的批量查询
GET _mget
{
"docs":[
{
"_index":"indexname",
"_type":"user",
"_id" : "1",
"_source":"age"
},
{
"_index" : ".kibana_1",
"_type" : "doc",
"_id" : "config:6.5.0",
"_source":["config","type"]
}
]
}
简化版批量查询
GET /indexname/user/_mget
{
"docs":[
{ "_id" : "1"
},
{
"_id" : "dWAwMWgBpc13yMzTVGij"
}
]
}
更简化版
GET /indexname/user/_mget
{
"ids":["1","dWAwMWgBpc13yMzTVGij"]
}
BULK 实现批量操作
批量添加文档
//其中 index 如果存在就替换,不存在就新增 create 不能进行替换,如果存在就报错 POST /indexname/user/_bulk
{"index":{"_id":1}} //确定id
{"name":1} //方法体
{"index":{"_id":2}}
{"name":2}
{"index":{"_id":3}}
{"name":3}
{"index":{"_id":4}}
{"name":4}
{"index":{"_id":5}}
{"name":5}
{"index":{"_id":6}}
{"name":6}
删除是不需要方法体的
批量操作如下图:(其中有一个出错,是因为前面删除了id为4的,后面又进行了更新)
这个的处理量的有限的,它是将文档加入到缓存中进行的,一般建议文档数量在1000-5000之间

mapping 确定文档类型
GET /indexname/user/_mapping //查询mapping


中文一般需要制定文档类型
PUT games
{
"mappings": {
"game":{
"properties": {
"name":{"type": "text","analyzer": "ik_max_word"},
"art":{"type": "text","analyzer": "ik_max_word"}
}
}
}
}
ElasticSearch的常用方法的更多相关文章
- Curl操作Elasticsearch的常用方法
Elasticsearch对于文档操作,提供了以下几种API,本文就说明如何使用curl方式来调用这些API. API种类 单文档操作API 1.* Index API 索引文档 * 为文档创建索引 ...
- 学习python库:elasticsearch-py
一.介绍 elasticsearch-py是一个官方提供的low-level的elasticsearch python客户端库.为什么说它是一个low-level的客户端库呢?因为它只是对elasti ...
- Elasticsearch学习之SearchRequestBuilder常用方法说明
SearchRequestBuilder常用方法说明 (1) setIndices(String... indices):上文中描述过,参数可为一个或多个字符串,表示要进行检索的index: (2) ...
- python 查询 elasticsearch 常用方法(Query DSL)
1. 建立连接 from elasticsearch import Elasticsearch es = Elasticsearch(["localhost:9200"]) 2. ...
- python 使用 elasticsearch 常用方法(聚合)
#记录聚合查询方法 from elasticsearch import Elasticsearch es = Elasticsearch(['xx.xx.xx.xx:9200']) #获取最小的年龄r ...
- python 使用 elasticsearch 常用方法(检索)
#记录es查询等方法 #清楚数据 curl -XDELETE http://xx.xx.xx.xx:9200/test6 #初始化数据 curl -H "Content-Type: appl ...
- python 使用 elasticsearch 常用方法(索引)
#记录管理索引等方法 from elasticsearch import Elasticsearch es = Elasticsearch(['xx.xx.xx.xx:9200']) #获取文档内容r ...
- elasticsearch搜索引擎的常用方法
1.term和termsterm和terms等查询,不会对查询对字段进行分词处理,适合于date.num.id等确切数据进行搜索 如果需要查询keywords,则查询等keywords必须是查询字段中 ...
- Elasticsearch .Net Client NEST使用说明 2.x
Elasticsearch .net client NEST使用说明 2.x Elasticsearch.Net与NEST是Elasticsearch为C#提供的一套客户端驱动,方便C#调用Elast ...
随机推荐
- 【POJ 2406】 Power Strings
[题目链接] 点击打开链接 [算法] KMP 如果字符串中存在循环节,则next[len] = (循环节个数 - 1) * 循环节长度 循环节个数 = len / (len - next[len]) ...
- 详述IntelliJ IDEA插件的安装及使用方法(图解)
intellij idea是一款非常优秀的软件开发工具,它拥有这强大的插件体系,可以帮助开发者完成很多重量级的功能.今天,我们来学习一下如何安装和卸载intellij idea的插件. Intelli ...
- Cocos2d-x 3.2 创建新应用
1.cd 到 Cocos2d-x 3.2 的目录: 2.python setup.py: 3.source /Users/netty/.bash_profile ; 4.cocos new TestP ...
- gitbucket
github固然强大,但不怎么适合企业级的开发版本管理,原因相信大家都明白,首先在github上上传和拉取代码速度是比较慢的,再者,在Github上创建一个私有仓库是收费的,那么gitbucket是一 ...
- 【转】PL/SQL 使用技巧
ref:http://blog.chinaunix.net/uid-21592001-id-3082675.html [转]plsql developer 使用技巧 Oracle数据库相信已成为很多企 ...
- FrameLayout 的使用方法
一.FrameLayout介绍 FrameLayout帧布局是最简单的布局之一,采用帧布局的容器中无论放入多少个控件,控件默认情况下左上角都对齐到容器的左上角,如果控件一样大,同一时间只能见到最上面的 ...
- “玲珑杯”线上赛 Round #17 河南专场 B:震惊,99%+的中国人都会算错的问题(容斥计算)
传送门 题意 略 分析 是一道稍微变形的容斥题目,容斥一般的公式 \[ans=\sum_iAi-\sum_{i<j}{Ai∩Aj}+\sum_{i<j<k}{Ai∩Aj∩Ak}+.. ...
- 2016 Multi-University Training Contest 3 1011【鸽巢原理】
题解: 坐标(0,m)的话,闭区间,可能一共有多少曼哈顿距离? 2m 但是给一个n,可能存在n(n+1)/2个曼哈顿距离 所以可以用抽屉原理了 当n比抽屉的数量大,直接输出yes 不用计算 那...N ...
- springboot整合H2内存数据库,实现单元测试与数据库无关性
一.新建spring boot工程 新建工程的时候,需要加入JPA,H2依赖 二.工程结构 pom文件依赖如下: <?xml version="1.0" encoding ...
- 笔记-JavaWeb学习之旅3
数据库的设计 1.多表之间的关系 一对一 一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键 一对多 在多的一方建立外键指向一的一方建立主键 多对多 多对多关系实现需要借助第三张中间表.中间表 ...