ElasticSearch学习笔记_1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 具体的代码,在kibana实现

  1 PUT /ems  #建立索引
  2 PUT /dangdang
  3 GET /_cat/indices#查看所有索引
  4 GET /dangdang
  5 DELETE /dangdang#删除索引
  6 DELETE /*  #删除所有索引
  7 
  8 PUT /ems1#设定索引,类型唯一为_doc可以省略
  9 {
 10   "mappings":{
 11     
 12       "properties":{
 13         "id":{"type":"keyword"},
 14         "name":{"type":"keyword"},
 15         "age":{"type":"integer"},
 16         "bir":{"type":"date"}
 17         
 18       
 19     }
 20   }
 21 }
 22 GET /ems1/_mapping#查看映射,在版本7中,类型唯一,
 23 PUT /ems1/_doc/1#插入文档,一般用_id(前面的1)代替下面的id
 24 {
 25   "id":"12",
 26   "name":"刘雷",
 27   "age":12,
 28   "bir":"1997-03-02"
 29 }
 30 GET /ems1/_doc/1   #查看指定文档类型默认为_doc,
 31 POST /ems1/_doc/1#对原文档进行覆盖,不是更新,更新的话需要在后面指定update,不指定id会自动生成
 32 {
 33   "id":"12",
 34   "name":"刘雷111",
 35   "age":12,
 36   "bir":"1997-03-02"
 37 }
 38 GET /ems1/_doc/1
 39 PUT /ems1/_doc/2
 40 {
 41   "id":"12",
 42   "name":"流泪",
 43   "age":12,
 44   "bir":"2002-12-12"
 45 }
 46 DELETE /ems1/_doc/1#删除
 47 GET /ems1/#查看
 48 POST  /ems1/_doc/2/_update#在原有基础上更新
 49 {
 50   "doc":{
 51     "name": "哈哈"
 52   }
 53 }
 54 POST  /ems1/_doc/2/_update#添加新的数据time
 55 {
 56   "doc": {
 57     "name":"哈哈",
 58     "time":"16:40",
 59     "num": 12
 60   }
 61 }
 62 GET /ems1/_doc/2
 63 
 64 POST /ems1/_doc/2/_update#对文档数字进行直接更新
 65 {
 66   "script":"ctx._source.num += 5"
 67 }
 68 GET /ems1/_doc/2  #num=17
 69 PUT /ems1/_bulk#批量增加数据
 70   {"index":{"_id":"3"}}
 71     {"name":"liulei","age":23,"bir":"2020-12-12"}
 72   {"index":{"_id":"4"}}
 73      {"name":"liuya","age":13,"bir":"2020-12-12"}
 74 GET /ems1/_doc/3
 75 POST /ems1/_bulk#批量进行增加删除修改一起操作,更新指定doc表明在原内容上进行更新,不会删除原来的内容
 76   {"update":{"_id":"3"}}
 77   {"doc":{"name":"lisi"}}  
 78   {"delete":{"_id":"2"}}
 79   {"index":{}}
 80   {"name":"ll","age":12}
 81   ###########################使用请求体进行检索###########################
 82   
 83   
 84 PUT /ems
 85 {
 86   "mappings": {
 87     "properties": {
 88       "name":{
 89         "type": "text"
 90       },
 91       "age":{
 92         "type": "integer"
 93       },
 94       "bir":{
 95         "type": "date"
 96       },
 97       "content":{
 98         "type": "text"
 99       },
100       "address":{
101         "type": "keyword"
102       }
103     }
104   }
105 }
106 DELETE /ems
107 PUT /ems/_bulk
108   {"index":{}}
109     {"name":"小黑","age":23,"bir":"2020-12-12","content":"开发一个MVC框架是个难事","address":"北京"}
110   {"index":{}}
111     {"name":"梅开风","age":24,"bir":"2020-12-12","content":"框架是一个分层次的架构,有多个模块组成,Spring 模块构建在核心容器之上","address":"上海"}
112   {"index":{}}
113     {"name":"王小黑","age":8,"bir":"2020-12-12","content":"Spring boot是Java语言的微服务架构","address":"南京"}
114   {"index":{}}
115     {"name":"张小五","age":9,"bir":"2020-12-12","content":"Spring的目标是简化Java的开发","address":"无锡"}
116   {"index":{}}
117     {"name":"win7","age":43,"bir":"2020-12-12","content":"Redis是一个开源的ansi c语言编写,支持网络的数据库","address":"杭州"}
118   {"index":{}}
119     {"name":"张无忌","age":58,"br":"2020-12-12","content":"Elasticsearch是一个搜索服务器","address":"郑州"}
120 
121 
122 ####使用url方式进行查询
123 GET /ems/_search?q=*  
124 #对查询结果进行排序asc是升序,size表示只取结果的前几个,from是进行分页,表示从第几个记录开始展示
125 GET /ems/_search?q=*&sort=age:desc&size=2&from=2
126 #使用DSL方式进行检索
127 #查询所有数据,进行分页排序,选定大小
128 GET /ems/_search
129 {
130   "query":{"match_all": {}},
131   "size": 2,
132   "from": 0,
133   "sort": [
134     {
135       "FIELD": {
136         "age": "desc"
137       }
138     }
139   ]
140 }
141 #查询结果中返回指定的字段
142 GET /ems/_search
143 {
144   "query": {"match_all": {}},
145   "_source": ["age","name"]
146 }
147 #关键字查询,这种查询方式是根据单个词或者单个汉字进行查询,之后引入分词才可以进行以词语为单位等,注意只有声明为text的时候是进行单个词的匹配,其他的类型(ip,boolean,integer,data,double,keyword等都是根据value的全部内容进行匹配)
148 GET /ems/_search#可以检索到
149 {
150   "query": {"term": {
151     "content": {
152       "value": "框"
153     }
154   }}
155 }
156 GET /ems/_search#可以检索到
157 {
158   "query": {"term": {
159     "name": {
160       "value": "黑"
161     }
162   }}
163 }
164 GET /ems/_search#不可以检索到
165 {
166   "query": {"term": {
167     "content": {
168       "value": "框架"
169     }
170   }}
171 }
172 GET /ems/_search #可以检索到
173 {
174   "query": {"term": {
175     "bir": {
176       "value": "2020-12-12"
177     }
178   }}
179 }
180 #范围查询(range)
181 GET /ems/_search
182 {
183   "query": {"range":{
184     "age": {
185       "gte": 10,
186       "lte": 30
187     }
188   }
189     
190   }
191 }
192 #前缀查询
193 GET /ems/_search
194 {
195   "query": {
196     "prefix": {
197       "content": {
198         "value": "框"
199       }
200     }
201   }
202 }
203 GET /ems/_search#需要注意的是数据库中的所有英文都被变成小写了,前缀主要是对于非text或者text引入了分词的概念此时通配符才能有作用,如下面的例子,南京在address里面是个整体所以正常需要“南京”才能匹配到,引入前缀就可以部分词进行匹配
204 {
205   "query": {
206     "prefix": {
207       "address": {
208         "value": "南" 
209       }
210     }
211   }
212 }
213 #通配符查询?用来匹配一个任意的字符*用来匹配多个字符
214 GET /ems/_search
215 {
216   "query": {
217     "wildcard": {
218       "content": {
219         "value": "sp*"
220       }
221     }
222   }
223 }
224 GET /ems/_search
225 {
226   "query": {
227     "wildcard": {
228       "content": {
229         "value": "框*"
230       }
231     }
232   }
233 }
234 #多id进行查询
235 GET ems/_search
236 {
237   "query": {
238     "ids": {
239       "values": [
240         "AoUFPHUBwStJbspbRiwc","A4UFPHUBwStJbspbRiwc"]
241     }
242   }
243 }
244 #模糊查询。此时当查询的内容与被查询的内容之间的编辑距离不大于2时可以成功的进行模糊匹配,具体是2个字符一下的要完全正确,2到4个只能错1个,五个以上最多错2个,其中编辑距离的概念是是指两个字串之间,由一个转成另一个(增删改)所需的最少编辑操作次数
245 GET /ems/_search
246 {
247   "query": {
248     "fuzzy": {
249       "content": "spr0og"
250     }
251   }
252 }
253 #布尔查询,是对多个条件实现复杂查询,bool表达式
254 #must 相当于&&同时成立,should: 相当于||成立一个就可以
255 #must not: 相当于!不能满足任何一个
256 
257 GET /ems/_search
258 {
259   "query": {
260     "bool": {
261       "must": [
262         {"term": {
263           "content": {
264             "value": "语"
265           }
266         }}
267       ]
268       , "must_not": [
269         {"term": {
270           "age": {
271             "value": "43"
272           }
273         }}
274       ]
275     }
276   }
277 }
278 #多字段查询。得分是根据文章长度,和匹配到的次数,文章越短匹配次数越多越正确
279 #对于字段来说类型是text的需要对query进行分词处理,对于address则需要整体进行匹配
280 GET /ems/_search
281 {
282   "query": {
283     "multi_match": {
284       "query": "上海框架",
285       "fields": ["content","address"]
286     }
287   }
288 }
289 #多字段分词查询,这种查询方式需要先设定好分词器的类型
290 GET /ems/_search
291 {
292   "query": {
293     "multi_match": {
294       "analyzer": "standard", 
295       "query": "上海框架",
296       "fields": ["content","address"]
297     }
298   }
299 }
300 GET _analyze  #分成一个个字
301 {
302   "analyzer": "standard",
303   "text": "这是个框架"
304 }
305 GET _analyze#分成的结果是个整体
306 {
307   "analyzer": "simple",
308   "text": "这是个框架"
309 }
310 #高亮查询,一般把类型设置为text方便进行匹配
311 GET /ems/_search
312 {
313   "query": {"term": {
314     "content": {
315       "value": "开"
316     }
317   }},
318    "highlight": {
319  
320     "fields": {"*": {}},
321     "pre_tags": ["<span style='color:red'>"],
322     "post_tags": ["</span>"],
323     "require_field_match": "false"
324   }
325   
326 }

 另一篇相关的关于elasticsearch的代码博客:https://www.cnblogs.com/naixin007/p/12088752.html

需要也可以看一下

posted @ 2020-10-18 23:30  你的雷哥  阅读(158)  评论(0编辑  收藏  举报