关键词 

  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的常用方法的更多相关文章

  1. Curl操作Elasticsearch的常用方法

    Elasticsearch对于文档操作,提供了以下几种API,本文就说明如何使用curl方式来调用这些API. API种类 单文档操作API 1.* Index API 索引文档 * 为文档创建索引 ...

  2. 学习python库:elasticsearch-py

    一.介绍 elasticsearch-py是一个官方提供的low-level的elasticsearch python客户端库.为什么说它是一个low-level的客户端库呢?因为它只是对elasti ...

  3. Elasticsearch学习之SearchRequestBuilder常用方法说明

    SearchRequestBuilder常用方法说明  (1) setIndices(String... indices):上文中描述过,参数可为一个或多个字符串,表示要进行检索的index: (2) ...

  4. python 查询 elasticsearch 常用方法(Query DSL)

    1. 建立连接 from elasticsearch import Elasticsearch es = Elasticsearch(["localhost:9200"]) 2. ...

  5. python 使用 elasticsearch 常用方法(聚合)

    #记录聚合查询方法 from elasticsearch import Elasticsearch es = Elasticsearch(['xx.xx.xx.xx:9200']) #获取最小的年龄r ...

  6. python 使用 elasticsearch 常用方法(检索)

    #记录es查询等方法 #清楚数据 curl -XDELETE http://xx.xx.xx.xx:9200/test6 #初始化数据 curl -H "Content-Type: appl ...

  7. python 使用 elasticsearch 常用方法(索引)

    #记录管理索引等方法 from elasticsearch import Elasticsearch es = Elasticsearch(['xx.xx.xx.xx:9200']) #获取文档内容r ...

  8. elasticsearch搜索引擎的常用方法

    1.term和termsterm和terms等查询,不会对查询对字段进行分词处理,适合于date.num.id等确切数据进行搜索 如果需要查询keywords,则查询等keywords必须是查询字段中 ...

  9. Elasticsearch .Net Client NEST使用说明 2.x

    Elasticsearch .net client NEST使用说明 2.x Elasticsearch.Net与NEST是Elasticsearch为C#提供的一套客户端驱动,方便C#调用Elast ...

随机推荐

  1. DPI和PPI

    写在前面 各种手机测频机构或者相关资讯老是谈及一个概念:ppi和dpi,通常总会忽略,只是稍微明白,这参数越高,说明屏幕分辨率越高:很长时间都止步如此:但作为一个iOS开发者,岂能止步如此,万一别人问 ...

  2. [USACO2007 Demo] Cow Acrobats

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1629 [算法] 贪心 考虑两头相邻的牛 , 它们的高度值和力量值分别为ax , ay ...

  3. spark运行原理

    一.Spark专业术语定义 二. Spark的任务提交机制 一.Spark专业术语定义 从以下十五个方面描述spark概念. 1  application: spark应用程序 2  Driver:驱 ...

  4. 模态对话框 DoModal的用法 (vs2008)与非模态对话框

    Windows对话框分为两类:模态对话框和非模态对话框. 模态对话框,当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互. ...

  5. 【转】图像金字塔PyrDown,PyrUP

    原文链接:http://blog.csdn.net/davebobo/article/details/51885043 [图像金字塔] 图像金字塔这个词,我们经常在很多地方可以看到.它是图像多尺度表达 ...

  6. bzoj 1874: [BeiJing2009 WinterCamp]取石子游戏【博弈论】

    先预处理出来sg值,然后先手必败状态就是sg[a[i]]的xor和为0(nim) 如果xor和不为0,那么一定有办法通过一步让xor和为0,具体就是选一个最大的sg[a[i]],把它去成其他sg值的x ...

  7. IT兄弟连 JavaWeb教程 Servlet转发

    Servlet对象由Servlet容器创建,并且Servlet对象的service()方法也由容器调用,一个Servlet对象可否直接调用另一个Servlet对象的service()方法呢?答案是否定 ...

  8. tcpdump笔记

    最好的学习: man tcpdump ....... 一.TCPdump抓包命令  tcpdump是一个用于截取网络分组,并输出分组内容的工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为类 ...

  9. $BREEZE'S Diary$

    蒟蒻的日记没什么好看的. 2019-01-28 期末砸了. 洛谷开创小号. 开创博客园. 2019-01-29 坐标:义乌中学 咱今天又来义乌中学受虐了 感谢hjf给咱一次爆0的机会 题解 2019- ...

  10. js和jquery给iframe src赋值的3种方法

    js和jquery给iframe src赋值的3种方法   网页使用iframe嵌入网页时,有时候需要动态处理src的值,而不是写死的,所以我们需要知道如何给iframe src赋值,通常是使用js或 ...