背景

  我本来是想把我的写的es的平时总结dsl发出来的,但是我发现只搞那个意义大不.干脆多写点吧.

索引的结构化和非结构

  我们经常用数据库,当然会经常用到索引.

  然后从索引的维度去分析,系统分为结构化索引和非结构化索引.

  结构化索引,就是可以预设索引,比如id,可以预见的. 维护方便,性能高.

  非结构化索引,就是数据进来之前,我可能都不知道要进来什么. 然后数据进来后,我要进行分析. 比如,挨个扫描节点,看是否包含,比较墨迹. 或者将非结构化的数据的一部分信息提取出来,使其变得有结构,感觉很像抽象,有了结构,那就好搞很多.

elasticSearch简述

elasticSearch又称es,是一种分布式的搜索引擎工具,之前我们比较熟悉的应该是luence,然后再往前推进,就是solr;

三者的关系

luence是一个信息检索工具包,类似SDK,提供了全面的api,也可以做高级查询.但是作为一个搜索引擎来讲的话,并不太完整,因为缺乏了一些获取数据,解析,分词等功能.而且,用起来较为复杂.所以,我们可能更需要完整而且更简洁的搜索引用服务. 简而言之,很全面,很基础,用起来麻烦.

solr是基于luence,是对lucen的进一步封装,补全.提供了对应的api供我们调用,很容易就能实现检索服务,而且更为完整,可以根据配置文件解析数据等.但是因为是更高一层的封装,所以luence很多新特性不能及时透传,也就是luence能查,但是solr查不了.简而言之,solr是独立的,面向企业级的,搜索引擎.

es也是基于luence,并提供了更高层次的封装的搜索引擎.特点对索引进行分片,将一个大的索引拆分多个,分布到不同节点上,降低服务器压力,构成分布式搜索,从大大提升搜索效率.是一款近乎实时分析的搜索引擎,非常强力.而且采用了restful风格,更易于上手.简而言之,分片机制,分布式搜索,实时,很强力.

实际开发中的dsl语句

记得装了es之后,再装个kibana,然后再kibana上跑这些程序.

  1. #处理下hyd_test的全文导入
  2. DELETE hyd_test
  3.  
  4. GET /hyd_test/_doc/_search

#批量更新
  POST /hyd_test/_doc/_bulk
  {"update":{"_id":1}}
  {"doc":{"reference_law":"《中华人民共和国民事诉讼法》第二百一十条 、第二百三十三条 、第二百零七条 、第一百七十条","trial_court":"最高人民法院","assistan t_judge":"齐召财","clerk":"齐召财","lawyer":"","law_firm":"","legal_basis":"","created_time":"2020-09-02 15:32:00","created_by":"admi  n","updated_time":"2020-09-02 15:34:12","updated_by":"","is_delete":0},"doc_as_upsert":true}

  1. #批量写入
  2. POST test_demo/_doc/_bulk
  3. {"create":{"_id":1}}
  4. {"case_name":"你好你好 ,嗨美女","count":18}
  5. {"create":{"_id":2}}
  6. {"case_name":"好的好的,大美女","count":19}
  7.  
  8. #查询结构
  9. GET /test_demo/_mapping
  10.  
  11. #查询分词_analyze
  12. POST /test_demo/_analyze
  13. {
  14. "analyzer": "ik_max_word",
  15. "text": "你好你好 ,嗨美女"
  16. }
  17.  
  18. #match查询
  19. GET /test_demo/_doc/_search
  20. {
  21. "query": {
  22. "match": {
  23. "case_name": {
  24. "query": "是个美女"
  25. }
  26. }
  27. }
  28. }
  29.  
  30. #精确匹配term
  31. GET /test_demo/_doc/_search
  32. {
  33. "query": {
  34. "term": {
  35. "case_name": {
  36. "value": "是个美女"
  37. }
  38. }
  39. }
  40. }
  41.  
  42. #and 查询
  43. GET hyd_test/_search
  44. {
  45. "from": 0,
  46. "size": 10,
  47. "query": {
  48. "bool": {
  49. "must": [
  50. {
  51. "match": {
  52. "trial_year": "2018"
  53. }
  54. },
  55. {
  56. "match": {
  57. "case_cause_id": "100"
  58. }
  59. }
  60. ]
  61. }
  62. }
  63. }
  64. #统计
  65. GET hyd_test/_search
  66. {
  67. "size": 0,
  68. "query": {
  69. "match": {
  70. "case_cause_name": "相邻通行纠纷"
  71. }
  72. },
  73. "aggs": {
  74.  
  75. "document_type_name":{
  76. "terms": {
  77. "field": "document_type_name",
  78. "size": 10
  79. }
  80. }
  81. }
  82. }
  83.  
  84. #清空所有数据
  85. POST authoritative_case/_delete_by_query
  86. {
  87. "query":{
  88. "match_all":{
  89.  
  90. }
  91. }
  92. }
  93.  
  94. #高亮. 注意, 高亮必须match也要带上同样的字段.
  95. GET hyd_test/_search
  96. {
  97.  
  98. "query": {
  99. "match": {
  100. "case_cause_name": "相邻通行纠纷"
  101. }
  102. },
  103. "highlight": {
  104. "fields": {
  105. "case_cause_name":{
  106.  
  107. }
  108. }
  109. }
  110.  
  111. }
  112.  
  113. #高亮,加颜色,并且不要求 number_of_fragments 分段. 默认为5 ,就是划分为5断.
  114. GET hyd_test/_search
  115. {
  116. "query": {
  117. "bool": {
  118. "must": [
  119. {
  120. "query_string": {
  121. "query": "一审"
  122. }
  123. },
  124. {
  125. "match": {
  126. "id": {
  127. "query": 1
  128. }
  129. }
  130. }
  131. ]
  132. }
  133. },
  134. "highlight": {
  135. "pre_tags": [
  136. "<span style='color:red'>"
  137. ],
  138. "post_tags": [
  139. "</span>"
  140. ],
  141. "fragment_size": 1000,
  142. "number_of_fragments": 0,
  143. "require_field_match": false,
  144. "fields": {
  145. "*": {}
  146. }
  147. }
  148. }
  149.  
  150. #id为1的全文高亮
  151. GET hyd_test/_search
  152. {
  153. "query": {
  154. "bool": {
  155. "must": [
  156. {
  157. "query_string": {
  158. "query": "民事"
  159. }
  160. },
  161. {
  162. "query_string": {
  163. "query": "理由"
  164. }
  165. },
  166. {
  167. "match": {
  168. "id": "1"
  169. }
  170. }
  171. ]
  172. }
  173. },
  174. "highlight": {
  175. "require_field_match": "false",
  176. "fields": {
  177. "*": {}
  178. }
  179. }
  180. }
  181.  
  182. #查询嵌套对象: path里面是对象visible_user query最里面是实际字段visible_user.visible_user_id
  183. GET gzmx_clue/_search
  184. {
  185. "from": 0,
  186. "size": 10,
  187. "query": {
  188. "bool": {
  189. "must": [
  190. {
  191. "nested": {
  192. "path": "visible_user",
  193. "query": {
  194. "terms": {
  195. "visible_user.visible_user_id": [
  196. 185
  197. ]
  198. }
  199. }
  200. }
  201. }
  202. ]
  203. }
  204. }
  205. }
  206.  
  207. #复杂查询 先取交集,再取并集. should(must,must) .
  208. GET gzmx_clue/_search
  209. {
  210. "query": {
  211. "bool": {
  212. "should": [
  213. {
  214. "bool": {
  215. "must": {
  216. "match": {
  217. "procuratorate_code": "2"
  218. }
  219. },
  220. "must_not": {
  221. "match": {
  222. "source": "9"
  223. }
  224. }
  225. }
  226. },
  227. {
  228. "bool": {
  229. "must": [
  230. {
  231. "match": {
  232. "source": "9"
  233. }
  234. },
  235. {
  236. "nested": {
  237. "path": "visible_user",
  238. "query": {
  239. "terms": {
  240. "visible_user.visible_user_id": [
  241. 186
  242. ]
  243. }
  244. }
  245. }
  246. },
  247. {
  248. "match": {
  249. "procuratorate_code": "2"
  250. }
  251. }
  252. ]
  253. }
  254. }
  255. ]
  256. }
  257. }
  258. }
  259.  
  260. #must和shoule交集使用会导致should不起效. 所以, 尽量把should放在must里面.
  261. {
  262. "from": 0,
  263. "size": 10,
  264. "query": {
  265. "bool": {
  266. "must": [
  267. {
  268. "terms": {
  269. "clue_feature": [
  270. "0"
  271. ],
  272. "boost": 1
  273. }
  274. },
  275. {
  276. "bool": {
  277. "should": [
  278. {
  279. "bool": {
  280. "must": [
  281. {
  282. "match": {
  283. "procuratorate_code": {
  284. "query": 2,
  285. "operator": "OR",
  286. "prefix_length": 0,
  287. "max_expansions": 50,
  288. "fuzzy_transpositions": true,
  289. "lenient": false,
  290. "zero_terms_query": "NONE",
  291. "auto_generate_synonyms_phrase_query": true,
  292. "boost": 1
  293. }
  294. }
  295. }
  296. ],
  297. "must_not": [
  298. {
  299. "match": {
  300. "source": {
  301. "query": 9,
  302. "operator": "OR",
  303. "prefix_length": 0,
  304. "max_expansions": 50,
  305. "fuzzy_transpositions": true,
  306. "lenient": false,
  307. "zero_terms_query": "NONE",
  308. "auto_generate_synonyms_phrase_query": true,
  309. "boost": 1
  310. }
  311. }
  312. }
  313. ],
  314. "adjust_pure_negative": true,
  315. "boost": 1
  316. }
  317. },
  318. {
  319. "bool": {
  320. "must": [
  321. {
  322. "nested": {
  323. "query": {
  324. "terms": {
  325. "visible_user.visible_user_id": [
  326. 432
  327. ],
  328. "boost": 1
  329. }
  330. },
  331. "path": "visible_user",
  332. "ignore_unmapped": false,
  333. "score_mode": "none",
  334. "boost": 1
  335. }
  336. },
  337. {
  338. "match": {
  339. "procuratorate_code": {
  340. "query": 2,
  341. "operator": "OR",
  342. "prefix_length": 0,
  343. "max_expansions": 50,
  344. "fuzzy_transpositions": true,
  345. "lenient": false,
  346. "zero_terms_query": "NONE",
  347. "auto_generate_synonyms_phrase_query": true,
  348. "boost": 1
  349. }
  350. }
  351. },
  352. {
  353. "match": {
  354. "source": {
  355. "query": 9,
  356. "operator": "OR",
  357. "prefix_length": 0,
  358. "max_expansions": 50,
  359. "fuzzy_transpositions": true,
  360. "lenient": false,
  361. "zero_terms_query": "NONE",
  362. "auto_generate_synonyms_phrase_query": true,
  363. "boost": 1
  364. }
  365. }
  366. }
  367. ],
  368. "adjust_pure_negative": true,
  369. "boost": 1
  370. }
  371. }
  372. ],
  373. "adjust_pure_negative": true,
  374. "boost": 1
  375. }
  376. }
  377. ],
  378. "adjust_pure_negative": true,
  379. "boost": 1
  380. }
  381. },
  382. "sort": [
  383. {
  384. "created_time": {
  385. "order": "desc"
  386. }
  387. },
  388. {
  389. "id": {
  390. "order": "desc"
  391. }
  392. }
  393. ],
  394. "track_total_hits": 2147483647
  395. }
  396. #查询所有数量
  397. GET gzmx_clue/_search
  398. {
  399. "track_total_hits":true,
  400. "query":{
  401. "match_all":{}
  402. }
  403. }

elasticsearch相关概念及常用操作汇总的更多相关文章

  1. Kotlin——初级篇(八):关于字符串(String)常用操作汇总

    在前面讲解Kotlin数据类型的时候,提到了字符串类型,当然关于其定义在前面的章节中已经讲解过了.对Kotlin中的数据类型不清楚的同学.请参考Kotlin--初级篇(三):数据类型详解这篇文章. 在 ...

  2. Kotlin——关于字符串(String)常用操作汇总

    在前面讲解Kotlin数据类型的时候,提到了字符串类型,当然关于其定义在前面的章节中已经讲解过了.对Kotlin中的数据类型不清楚的同学.请参考Kotlin——初级篇(三):数据类型详解这篇文章. 在 ...

  3. ElasticSearch 集群基本概念及常用操作汇总(建议收藏)

    内容来源于本人的印象笔记,简单汇总后发布到博客上,供大家需要时参考使用. 原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 目录: Elas ...

  4. Git常用操作汇总(转)

    如果一个文件被删除了,可以使用切换版本号进行恢复.恢复方法: 先确定需要恢复的文件要恢复成哪一个历史版本(commit),假设那个版本号是: commit_id,那么 git checkout com ...

  5. Elasticsearch(Transport Client)常用操作

    这里描述操作elasticsearch采用TransportClient这种方式,官方明确表示在ES 7.0版本中将弃用TransportClient客户端,且在8.0版本中完全移除它. 记录一些常用 ...

  6. ElasticSearch之映射常用操作

    本文案例操作,建议先阅读我之前的文章<ElasticSearch之安装及基本操作API> Mapping (映射)类似关系型数据库中的表的结构定义.我们将数据以 JSON 格式存入到 El ...

  7. ListControl常用操作汇总

    本文根据本人在项目中的应用,来谈谈CListCtrl的部分用法及技巧.当初学习时,查了很多资料,零零碎碎的作了些记录,现在主要是来做个总结,方便以后查阅.主要包括以下十三点内容:基本操作.获取选中行的 ...

  8. ssh下常用操作汇总(good)

    1. 安装git,从程序目录打开 "Git Bash"  2. 键入命令:ssh-keygen -t rsa -C "email@email.com"   &q ...

  9. ElasticSearch相关概念与客户端操作

    一.Elasticsearch概述 Elasticsearch是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document).然而它不仅仅是存储,还会索引(i ...

  10. Linux下常用操作汇总

    查看linux操作系统位数 (1) 终端输入: file /sbin/init 如 显示: /sbin/init: ELF 32-bit LSB executable, Intel 80386, ve ...

随机推荐

  1. 从源码层面深度剖析Spring循环依赖

    作者:郭艳红 以下举例皆针对单例模式讨论 图解参考 https://www.processon.com/view/link/60e3b0ae0e3e74200e2478ce 1.Spring 如何创建 ...

  2. C#代码扫描工具Sonarqube + Win10+SqlServer2017

    在之前的公司, 看到有用过代码扫描工具, 扫描C#代码, 最近公司也有考虑做这个,于是我便独自研究了一下,这里给大家做个分享 网上找了很多资料, 主要有以下问题: 1. Sonarqube用的是 旧版 ...

  3. 基于SqlSugar的开发框架循序渐进介绍(23)-- Winform端管理系统中平滑增加对Web API对接的需求

    在前面随笔介绍的基于SqlSugar的WInform端管理系统中,数据提供者是直接访问数据库的方式,不过窗体界面调用数据接口获取数据的时候,我们传递的是标准的接口,因此可扩展性比较好.我曾经在随笔&l ...

  4. gitee删除上传到的远程分支的提交记录

    在实际开发中可能也经常会遇到写完代码后提交到远程分支但发现写的提交信息有误,不符合规范.由于自己的gitee账号可能没有修改提交记录的权限.因此最佳的解决方法是,撤销本地分支当前的提交记录,将代码回滚 ...

  5. Ventoy制作启动盘和使用VMware测试启动盘(论文版)

    - 1 Ventoy 1.1  Ventoy是什么 Ventoy是可用于制作启动U盘的开源工具,在占用少量引导分区容量后,其他空间依旧可以正常当一般的U盘读写文件.它的最大特点是只要将iso.win. ...

  6. Flink 创始人团队二次收购案!阿里恐成冤大头!

    大数据开源商业化领域近日有一个爆炸性新闻,"Confluent 收购 Immerok",字越少事越大,先给大家简单科普一下 Confluent 和 Immerok 这两家公司,Co ...

  7. Creator 2.x 升级 3.x 基础 API 差异总结

    上一篇我们介绍了 Cocos Creator 2.x 项目升级 3.x 的大流程. 但最后一步,还需要手动将之前 2.x 写的函数注释一处处的放开. 并将 2.x 的代码写法改成 3.x 的,下面我们 ...

  8. [LeetCode]二进制求和

    题目 代码 class Solution { public: string addBinary(string a, string b) { int lenA = a.length(); int len ...

  9. 小白从零到AIoT之路(前言)

    什么是AIoT 简单来说就是AI(人工智能)+IoT(物联网)= AIoT(人工智能物联网). AIoT融合AI技术和IoT技术,通过物联网产生.收集来自不同维度的.海量的数据存储于云端.边缘端,再通 ...

  10. immutable.js学习笔记(六)----- OrderedSet

    一.OrderedSet 二.普通Set 与 OrderedSet 注意:普通Set并不是严格的一定是升序的 三.takeWhile 四.升序 sort valueA - valueB 五.降序 va ...