
{"id":3022,"date":"2021-02-04T16:38:10","date_gmt":"2021-02-04T08:38:10","guid":{"rendered":"http:\/\/127.0.0.2\/?p=3022"},"modified":"2021-02-04T16:38:10","modified_gmt":"2021-02-04T08:38:10","slug":"2020java%e5%be%ae%e6%9c%8d%e5%8a%a1%e6%9e%b6%e6%9e%84%e4%ba%94%e4%b9%8bes%e5%85%a8%e6%96%87%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e6%95%99%e7%a8%8b","status":"publish","type":"post","link":"https:\/\/www.9713job.com\/?p=3022","title":{"rendered":"2020java\u5fae\u670d\u52a1\u67b6\u6784\u4e94\u4e4bES\u5168\u6587\u641c\u7d22\u5f15\u64ce\u6559\u7a0b"},"content":{"rendered":"<h2>2020java\u5fae\u670d\u52a1\u67b6\u6784\u4e94\u4e4bES\u5168\u6587\u641c\u7d22\u5f15\u64ce\u6559\u7a0b<\/h2>\n<h3>\u4e00\u3001ElasticSearch \u4ecb\u7ecd<\/h3>\n<p><strong>1.1 \u5f15\u8a00<\/strong><\/p>\n<p>1.\u5728\u6d77\u91cf\u6570\u636e\u4e2d\u6267\u884c\u641c\u7d22\u529f\u80fd\u65f6\uff0c\u5982\u679c\u4f7f\u7528mysql\uff0c\u6548\u7387\u592a\u4f4e<br \/>\n2.\u5982\u679c\u5173\u952e\u5b57\u8f93\u5165\u7684\u4e0d\u51c6\u786e\uff0c\u4e00\u6837\u53ef\u4ee5\u641c\u7d22\u5230\u60f3\u8981\u7684\u6570\u636e\u3002<br \/>\n3.\u5c06\u641c\u7d22\u5173\u952e\u5b57\uff0c\u4ee5\u7ea2\u8272\u7684\u5b57\u4f53\u5c55\u793a\u3002<\/p>\n<p><strong>1.2 ES\u7684\u4ecb\u7ecd<\/strong><!--more--><\/p>\n<p>ES\u662f\u4e00\u4e2a\u4f7f\u7528java\u8bed\u8a00\u5e76\u4e14\u57fa\u4e8eLucene\u7f16\u5199\u7684\u6240\u6709\u5f15\u64ce\u6846\u67b6\uff0c\u63d0\u4f9b\u5206\u5e03\u5f0f\u7684\u5168\u6587\u641c\u7d22\u529f\u80fd\uff0c\u63d0\u4f9b\u4e86\u4e00\u4e2a\u7edf\u4e00\u7684\u57fa\u4e8eRESTful\u98ce\u683c\u7684web\u63a5\u53e3\uff0c\u5b98\u65b9\u5ba2\u6237\u7aef\u4e5f\u5bf9\u591a\u79cd\u8bed\u8a00\u90fd\u63d0\u4f9b\u4e86\u76f8\u5e94\u7684API<\/p>\n<p>Lucene\uff1a\u672c\u8eab\u5c31\u662f\u4e00\u4e2a\u641c\u7d22\u5f15\u64ce\u7684\u5e95\u5c42\u3002<\/p>\n<p>\u5206\u5e03\u5f0f\uff1aES\u4e3b\u8981\u662f\u4e3a\u4e86\u7a81\u51fa\u5b83\u7684\u6a2a\u5411\u6269\u5c55\u80fd\u529b<\/p>\n<p>\u5168\u6587\u68c0\u7d22\uff1a\u5c06\u4e00\u6bb5\u8bcd\u8bed\u8fdb\u884c\u5206\u8bcd\uff0c\u5e76\u4e14\u5c06\u5206\u51fa\u7684\u5355\u4e2a\u8bcd\u8bed\u7edf\u4e00\u653e\u5230\u4e00\u4e2a\u5206\u8bcd\u5e93\u4e2d\uff0c\u5728\u68c0\u7d22\u65f6\uff0c\u6839\u636e\u5173\u952e\u5b57\u53bb\u5206\u8bcd\u5e93\u4e2d\u68c0\u7d22\uff0c\u627e\u5230\u5339\u914d\u7684\u5185\u5bb9\u3002(\u5012\u6392\u7d22\u5f15)<\/p>\n<p>RESTful\u98ce\u683c\u7684web\u63a5\u53e3\uff1a\u64cd\u4f5cES\u5f88\u7b80\u5355\uff0c\u53ea\u9700\u8981\u53d1\u9001\u4e00\u4e2aHTTP\u8bf7\u6c42\uff0c\u5e76\u4e14\u6839\u636e\u8bf7\u6c42\u65b9\u5f0f\u7684\u4e0d\u540c\uff0c\u643a\u5e26\u53c2\u6570\u7684\u4e0d\u540c\uff0c\u6267\u884c\u76f8\u5e94\u7684\u529f\u80fd\u3002<\/p>\n<p>\u5e94\u7528\u5e7f\u6cdb\uff1agithub\u3001wiki\u3001gold man \u7528ES\u6bcf\u5929\u7ef4\u62a4\u5c06\u8fd110TB\u7684\u6570\u636e\u3002<\/p>\n<p><strong>1.3 ES\u7684\u7531\u6765<\/strong><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/01\/31\/1.png\" alt=\"\" width=\"680\" \/><\/p>\n<p><strong>1.4 ES\u548cSolr<\/strong><br \/>\n1. Solr\u5728\u67e5\u8be2\u6b7b\u6570\u636e\u65f6\uff0c\u901f\u5ea6\u76f8\u5bf9ES\u66f4\u5feb\u4e00\u4e9b\uff0c\u4f46\u662f\u6570\u636e\u5982\u679c\u662f\u5b9e\u65f6\u6539\u53d8\u7684\uff0cSolr\u7684\u67e5\u8be2\u901f\u5ea6\u4f1a\u964d\u4f4e\u5f88\u591a\uff0cES \u7684\u67e5\u8be2\u7684\u6548\u7387\u57fa\u672c\u6ca1\u6709\u53d8\u5316<br \/>\n2. Solr\u642d\u5efa\u57fa\u4e8e\u9700\u8981\u4f9d\u8d56 Zookeeper \u6765\u5e2e\u52a9\u7ba1\u7406\u3002ES\u672c\u8eab\u5c31\u652f\u6301\u96c6\u7fa4\u7684\u642d\u5efa\uff0c\u4e0d\u9700\u8981\u7b2c\u4e09\u65b9\u7684\u4ecb\u5165\u3002<br \/>\n3. \u6700\u5f00\u59cbSolr\u7684\u793e\u533a\u53ef\u4ee5\u8bf4\u662f\u975e\u5e38\u706b\u7206\u7684\uff0c\u9488\u5bf9\u56fd\u5185\u7684\u6587\u6863\u5e76\u4e0d\u662f\u5f88\u591a\u3002\u5728ES\u51fa\u73b0\u4e4b\u540e\uff0cES\u7684\u793e\u533a\u706b\u7206\u7a0b\u5ea6\u76f4\u7ebf\u4e0a\u5347\uff0cES\u7684\u6587\u6863\u975e\u5e38\u5065\u5168\u3002<br \/>\n4. ES\u5bf9\u73b0\u5728\u4e91\u8ba1\u7b97\u548c\u5927\u6570\u636e\u652f\u6301\u7684\u7279\u522b\u597d\u3002<\/p>\n<p><strong>1.5 \u5012\u6392\u7d22\u5f15<\/strong><\/p>\n<p>\u5c06\u5b58\u653e\u7684\u6570\u636e\uff0c\u4ee5\u4e00\u5b9a\u7684\u65b9\u5f0f\u8fdb\u884c\u5206\u8bcd\uff0c\u5e76\u4e14\u5c06\u5206\u8bcd\u7684\u5185\u5bb9\u653e\u5230\u4e00\u4e2a\u5355\u72ec\u7684\u5206\u8bcd\u5e93\u4e2d\u3002<br \/>\n\u5f53\u7528\u6237\u67e5\u8be2\u6570\u636e\u65f6\uff0c\u4f1a\u5c06\u7528\u6237\u7684\u67e5\u8be2\u5173\u952e\u5b57\u8fdb\u884c\u5206\u8bcd\u3002<br \/>\n\u7136\u540e\u53bb\u5206\u8bcd\u5e93\u4e2d\u5339\u914d\u5185\u5bb9\uff0c\u6700\u7ec8\u5f97\u5230\u6570\u636e\u7684id\u6807\u8bc6\u3002<br \/>\n\u6839\u636eid\u6807\u8bc6\u53bb\u5b58\u653e\u6570\u636e\u7684\u4f4d\u7f6e\u62c9\u53d6\u5230\u6307\u5b9a\u7684\u6570\u636e\u3002<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/01\/31\/2.png\" alt=\"\" width=\"680\" \/><\/p>\n<h3>\u4e8c\u3001ES \u5b89\u88c5<\/h3>\n<p><strong>2.1 \u5b89\u88c5ES<\/strong><\/p>\n<p>1.\u5728 opt \u76ee\u5f55\u4e0b\u521b\u5efa docker_es\u6587\u4ef6\u5939<br \/>\n2.\u8fdb\u5165 docker_es \u6587\u4ef6\u5939 \u521b\u5efa docker-compose.yml<br \/>\n3.\u542f\u52a8 docker-compose<br \/>\n4. \u67e5\u770b\u65e5\u5fd7 docker -compose logs -f<\/p>\n<p>\u51c6\u5907 docker-compose.yml<\/p>\n<pre>version: '3.1'\r\nservices:\r\n  elasticsearch:\r\n    restart: always\r\n    image: daocloud.io\/library\/elasticsearch:6.5.4\r\n    container_name: elasticsearch\r\n    ports:\r\n      - 9200:9200\r\n  kibana:\r\n    restart: always\r\n    image: daocloud.io\/library\/kibana:6.5.4\r\n    container_name: kibana\r\n    ports:\r\n      - 5601:5601\r\n    environment:\r\n      - elasticsearch_url=http:\/\/192.168.2.123:9200\r\n    depends_on:\r\n      - elasticsearch\r\n<\/pre>\n<p>\u5982\u679c\u542f\u52a8\u5931\u8d25\u5219\u5728 \/etc\/sysctl.conf\u6587\u4ef6\u6700\u540e\u6dfb\u52a0\u4e00\u884c<br \/>\nvm.max_map_count<span class=\"token operator\">=<\/span>262144<br \/>\n\u7136\u540e\u91cd\u542f\u670d\u52a1\u5373\u53ef<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/01\/31\/3.png\" alt=\"\" width=\"680\" \/><\/p>\n<p>\u7136\u540e\u8bbf\u95ee Kibana<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/01\/31\/4.png\" alt=\"\" width=\"680\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><strong>2.2 \u5b89\u88c5ik\u5206\u8bcd\u5668<\/strong><\/p>\n<p>\u8fdb\u5165ES\u5bb9\u5668\u5185\u90e8\uff0c\u8fdb\u5165bin\u76ee\u5f55\uff0c\u7136\u540e\u6267\u884c\uff1a<br \/>\n.\/elasticsearch-plugin install http:\/\/tomcat01.qfjava.cn:81\/elasticsearch-analysis-ik-6.5.4.zip<\/p>\n<p>\u518d\u7136\u540e\u8f93\u5165 y \u7ee7\u7eed\u5b89\u88c5<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/01\/31\/5.png\" alt=\"\" width=\"680\" \/><\/p>\n<p>\u4e4b\u540e\u91cd\u542fES\u5bb9\u5668\uff0c\u7136\u540e\u6253\u5370\u542f\u52a8\u65e5\u5fd7\u4e4b\u540e\u8fdb\u5165Kibana\u63a7\u5236\u53f0&#8211;&gt;Dev Tools<\/p>\n<p>POST _analyze<br \/>\n{<br \/>\n&#8220;analyzer&#8221;: &#8220;ik_max_word&#8221;,<br \/>\n&#8220;text&#8221;: &#8220;\u8212\u5927\u5c11\u535a\u5ba2&#8221;<br \/>\n}<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/01\/31\/6.png\" alt=\"\" width=\"680\" \/><\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/01\/31\/7.png\" alt=\"\" width=\"680\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3>\u4e09\u3001ElasticSearch\u57fa\u672c\u64cd\u4f5c<\/h3>\n<p><strong>3.1 ES\u7684\u7ed3\u6784<\/strong><\/p>\n<p>3.1.1 \u7d22\u5f15index\uff0c\u5206\u7247\u548c\u5907\u4efd<\/p>\n<p>es\u7684\u670d\u52a1\u4e2d\uff0c\u53ef\u4ee5\u521b\u5efa\u591a\u4e2a\u7d22\u5f15\u3002<br \/>\n\u6bcf\u4e00\u4e2a\u7d22\u5f15\u9ed8\u8ba4\u88ab\u5206\u62105\u7247\u5b58\u50a8<br \/>\n\u6bcf\u4e00\u4e2a\u5206\u7247\u90fd\u4f1a\u5b58\u5728\u81f3\u5c11\u4e00\u4e2a\u5907\u4efd\u5206\u7247\u3002<br \/>\n\u5907\u4efd\u5206\u7247\u9ed8\u8ba4\u4e0d\u4f1a\u5e2e\u52a9\u68c0\u7d22\u6570\u636e\uff0c\u5f53ES\u68c0\u7d22\u538b\u529b\u8fc7\u5927\u7684\u65f6\u5019\uff0c\u5907\u4efd\u5206\u7247\u624d\u4f1a\u5e2e\u52a9\u68c0\u7d22\u6570\u636e\u3002<br \/>\n\u5907\u4efd\u7684\u5206\u7247\u5fc5\u987b\u653e\u5728\u4e0d\u540c\u7684\u670d\u52a1\u5668\u4e2d\u3002<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/01\/31\/8.png\" alt=\"\" width=\"680\" \/><\/p>\n<p><strong>3.1.2 \u7c7b\u578b Type<\/strong><\/p>\n<p>\u4e00\u4e2a\u7d22\u5f15\u4e0b\uff0c\u53ef\u4ee5\u521b\u5efa\u591a\u4e2a\u7c7b\u578b<br \/>\nPS\uff1a\u6839\u636e\u7248\u672c\u4e0d\u540c\uff0c\u7c7b\u578b\u7684\u521b\u5efa\u4e5f\u4e0d\u540c\u3002<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/01\/31\/9.png\" alt=\"\" width=\"680\" \/><\/p>\n<p><strong>3.1.3 \u6587\u6863 Doc<\/strong><\/p>\n<p>\u4e00\u4e2a\u7c7b\u578b\u4e0b\uff0c\u53ef\u4ee5\u6709\u591a\u4e2a\u6587\u6863\uff0c\u8fd9\u4e2a\u6587\u6863\u5c31\u7c7b\u4f3c\u4e8emysql\u8868\u4e2d\u7684\u591a\u884c\u6570\u636e\u3002<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/01\/31\/10.png\" alt=\"\" width=\"680\" \/><\/p>\n<p><strong>3.1.4 \u5c5e\u6027 field<\/strong><\/p>\n<p>\u4e00\u4e2a\u6587\u6863\u4e2d\uff0c\u53ef\u4ee5\u5305\u542b\u591a\u4e2a\u5c5e\u6027\uff0c\u7c7b\u4f3c\u4e8emysql\u8868\u4e2d\u7684\u4e00\u884c\u6570\u636e\u5b58\u5728\u591a\u4e2a\u5217<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/01\/31\/11.png\" alt=\"\" width=\"680\" \/><\/p>\n<h3>3.2 \u64cd\u4f5c ES \u7684RESTful \u8bed\u6cd5<\/h3>\n<p>GET\u8bf7\u6c42\uff1a<br \/>\nhttp:\/\/ip:port\/index \uff1a\u67e5\u8be2\u7d22\u5f15\u4fe1\u606f<br \/>\nhttp:\/\/ip:port\/index\/type\/doc_id \uff1a\u67e5\u8be2\u6307\u5b9a\u7684\u6587\u6863\u4fe1\u606f<\/p>\n<p>POST \u8bf7\u6c42\uff1a<br \/>\nhttp:\/\/ip:port\/index\/type\/_search \uff1a\u67e5\u8be2\u6587\u6863\uff0c\u53ef\u4ee5\u5728\u8bf7\u6c42\u4f53\u4e2d\u6dfb\u52a0json\u5b57\u7b26\u4e32\u6765\u4ee3\u8868\u67e5\u8be2\u6761\u4ef6<br \/>\nhttp:\/\/ip:port\/index\/type\/doc_id\/_update \uff1a\u4fee\u6539\u6587\u6863\uff0c\u5728\u8bf7\u6c42\u4f53\u4e2d\u6dfb\u52a0json\u5b57\u7b26\u4e32\u4ee3\u8868\u4fee\u6539\u7684\u5177\u4f53\u4fe1\u606f<\/p>\n<p>PUT \u8bf7\u6c42\uff1a<br \/>\nhttp:\/\/ip:port\/index \uff1a\u521b\u5efa\u4e00\u4e2a\u7d22\u5f15\uff0c\u9700\u8981\u5728\u8bf7\u6c42\u4f53\u4e2d\u6307\u5b9a\u7d22\u5f15\u7684\u4fe1\u606f\uff0c\u7c7b\u578b\uff0c\u7ed3\u6784<br \/>\nhttp:\/\/ip:port\/index\/type\/_mappings \uff1a\u4ee3\u8868\u521b\u5efa\u7d22\u5f15\u65f6\uff0c\u6307\u5b9a\u7d22\u5f15\u6587\u6863\u7c7b\u578b\u5b58\u50a8\u7684\u5c5e\u6027\u7684\u4fe1\u606f<\/p>\n<p>DELETE \u8bf7\u6c42\uff1a<br \/>\nhttp:\/\/ip:port\/index \uff1a\u5220\u9664\u8dd1\u8def<br \/>\nhttp:\/\/ip:port\/index\/type\/doc_id \uff1a\u5220\u9664\u6307\u5b9a\u7684\u6587\u6863<\/p>\n<p><strong>3.3 \u7d22\u5f15\u7684\u64cd\u4f5c<\/strong><\/p>\n<p>3.3.1 \u521b\u5efa\u4e00\u4e2a\u7d22\u5f15<\/p>\n<pre># \u521b\u5efa\u4e00\u4e2a\u7d22\u5f15\r\nPUT \/person\r\n{\r\n  \"settings\": {\r\n    \"number_of_replicas\": 1,\r\n    \"number_of_shards\": 5\r\n  }\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/01\/31\/12.png\" alt=\"\" width=\"680\" \/><\/p>\n<p><strong>3.3.2 \u67e5\u770b\u7d22\u5f15\u4fe1\u606f<\/strong><\/p>\n<p># \u67e5\u770b\u7d22\u5f15<br \/>\nGET \/person<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/01\/31\/13.png\" alt=\"\" width=\"680\" \/><br \/>\n<img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/01\/31\/14.png\" alt=\"\" width=\"680\" \/><\/p>\n<p><strong>3.3.3 \u5220\u9664\u7d22\u5f15<\/strong><\/p>\n<p># \u5220\u9664\u7d22\u5f15<br \/>\nDELETE \/person<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/01\/31\/15.png\" alt=\"\" width=\"680\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><strong>3.4 ES\u4e2dfield\u53ef\u4ee5\u6307\u5b9a\u7684\u7c7b\u578b<\/strong><\/p>\n<p><strong>1.\u5b57\u7b26\u4e32\u7c7b\u578b<\/strong><br \/>\ntext\uff1a\u4e00\u822c\u88ab\u7528\u4e8e\u5168\u6587\u68c0\u7d22\uff0c\u5c06\u5f53\u524dfield\u8fdb\u884c\u5206\u8bcd<br \/>\nkeyword\uff1a\u5f53\u524dfield\u4e0d\u4f1a\u88ab\u5206\u8bcd<\/p>\n<p><strong>2.\u6570\u503c\u7c7b\u578b\uff1a<\/strong><br \/>\nlong \uff1a\u5360\u75288\u4e2a\u5b57\u8282<br \/>\ninteger \uff1a\u5360\u75284\u4e2a\u5b57\u8282<br \/>\nshort \uff1a\u5360\u75282\u4e2a\u5b57\u8282<br \/>\nbyte \uff1a\u5360\u75281\u4e2a\u5b57\u8282<br \/>\ndouble \uff1a \u5360\u75288\u4e2a\u5b57\u8282<br \/>\nfloat \uff1a \u5360\u75284\u4e2a\u5b57\u8282<br \/>\nhalf_float \uff1a\u7cbe\u5ea6\u6bd4float\u5c0f\u4e00\u534a<br \/>\nscaled_float \uff1a\u6839\u636e\u4e00\u4e2along\u548cscaled\u6765\u8868\u8fbe\u4e00\u4e2a\u6d6e\u70b9\u578b\uff0clong-345\uff0cscaled-100 -&gt; 3.45<\/p>\n<p><strong>3.\u65f6\u95f4\u7c7b\u578b<\/strong>\uff1adata\u7c7b\u578b\uff0c\u9488\u5bf9\u65f6\u95f4\u7c7b\u578b\u6307\u5b9a\u5177\u4f53\u7684\u683c\u5f0f<\/p>\n<p><strong>4.\u5e03\u5c14\u7c7b\u578b<\/strong>: boolean\u7c7b\u578b\uff0c\u8868\u8fbetrue\u6216false<\/p>\n<p><strong>5.\u4e8c\u8fdb\u5236\u7c7b\u578b<\/strong>\uff1abinary\u7c7b\u578b\u6682\u65f6\u652f\u6301 base64 encode string<\/p>\n<p><strong>6.\u8303\u56f4\u7c7b\u578b<\/strong>\uff1a<br \/>\n\u8d4b\u503c\u65f6\uff0c\u65e0\u9700\u6307\u5b9a\u5177\u4f53\u7684\u5185\u5bb9\uff0c\u53ea\u9700\u8981\u5b58\u50a8\u4e00\u4e2a\u8303\u56f4\u5373\u53ef\uff0c\u6307\u5b9a gt\uff0clt\uff0cgte\uff0clte<br \/>\nlong_range\u3001integer_range\u3001double_range\u3001float_range\u3001date_range\u3001ip_range<\/p>\n<p><strong>7. \u7ecf\u7eac\u5ea6\u7c7b\u578b<\/strong><br \/>\ngeo_point\uff1a\u7528\u6765\u5b58\u50a8\u7ecf\u7eac\u5ea6<\/p>\n<p><strong>8. ip\u7c7b\u578b<\/strong>\uff1aip\uff1a\u53ef\u4ee5\u5b58\u50a8IPV4\u6216IPV6<\/p>\n<p>\u5176\u4ed6\u7684\u6570\u636e\u7c7b\u578b\u8bf7\u53c2\u8003\uff1a<a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/6.5\/mapping-types.html\" target=\"_blank\" rel=\"noopener noreferrer\">\u5b98\u7f51<\/a><\/p>\n<p><strong>3.5 \u521b\u5efa\u7d22\u5f15\u5e76\u6307\u5b9a\u6570\u636e\u7ed3\u6784<\/strong><\/p>\n<pre># \u521b\u5efa\u7d22\u5f15\uff0c\u6307\u5b9a\u6570\u636e\u7ed3\u6784\r\nPUT \/book\r\n{\r\n  \"settings\": {\r\n    \"number_of_replicas\": 1,\r\n    \"number_of_shards\": 5\r\n  },\r\n  \"mappings\": {\r\n    \"novel\": {\r\n      \"properties\": {\r\n        \"name\":{\r\n          \"type\": \"text\",\r\n          \"analyzer\": \"ik_max_word\",\r\n          \"index\": true,\r\n          \"store\": false\r\n        },\r\n        \"author\": {\r\n          \"type\": \"keyword\"\r\n        },\r\n        \"count\": {\r\n          \"type\": \"long\"\r\n        },\r\n        \"on-sale\": {\r\n          \"type\": \"date\",\r\n          \"format\": \"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"\r\n        },\r\n        \"desc\": {\r\n          \"type\": \"text\",\r\n          \"analyzer\": \"ik_max_word\"\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/02\/2\/1.png\" alt=\"\" width=\"680\" \/><br \/>\n<img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/02\/2\/2.png\" alt=\"\" width=\"680\" \/><\/p>\n<p><strong>3.6 \u6587\u6863\u7684\u64cd\u4f5c<\/strong><\/p>\n<p>3.6.1 \u6dfb\u52a0\u6587\u6863<\/p>\n<p>\u81ea\u52a8\u751f\u6210id<\/p>\n<pre># \u6dfb\u52a0\u6587\u6863\uff0c\u81ea\u52a8\u751f\u6210id\r\nPOST \/book\/novel\r\n{\r\n  \"name\": \"\u76d8\u9f99\",\r\n  \"author\": \"\u756a\u8304\",\r\n  \"count\": \"100000\",\r\n  \"on-sale\": \"2020-01-01\",\r\n  \"desc\": \"\u76d8\u9f99\u5c0f\u8bf4\"\r\n}\r\n<\/pre>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/02\/2\/3.png\" alt=\"\" width=\"680\" \/><\/p>\n<p>\u624b\u52a8\u6307\u5b9a id<\/p>\n<pre># \u6dfb\u52a0\u6587\u6863\uff0c\u624b\u52a8\u6307\u5b9aid\r\nPOST \/book\/novel\/1\r\n{\r\n  \"name\": \"\u7ea2\u697c\u68a6\",\r\n  \"author\": \"\u66f9\u96ea\u82b9\",\r\n  \"count\": \"50000\",\r\n  \"on-sale\": \"1988-03-03\",\r\n  \"desc\": \"\u7ea2\u697c\u68a6\u5c0f\u8bf4\"\r\n}\r\n<\/pre>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/02\/2\/4.png\" alt=\"\" width=\"680\" \/><\/p>\n<p>3.6.2 \u4fee\u6539\u6587\u6863<\/p>\n<p>\u8986\u76d6\u5f0f\u4fee\u6539<\/p>\n<pre># \u4fee\u6539\u6587\u6863\uff0c\u624b\u52a8\u6307\u5b9aid\r\nPOST \/book\/novel\/1\r\n{\r\n  \"name\": \"\u7ea2\u697c\u68a6\",\r\n  \"author\": \"\u66f9\u96ea\u82b9\",\r\n  \"count\": \"50000\",\r\n  \"on-sale\": \"1988-03-03\",\r\n  \"desc\": \"\u7ea2\u697c\u68a6\u5c0f\u8bf4\"\r\n}\r\n<\/pre>\n<p>doc\u65b9\u5f0f\u4fee\u6539<\/p>\n<pre># \u4fee\u6539\u6587\u6863\uff0c\u57fa\u4e8edoc\u65b9\u5f0f\r\nPOST \/book\/novel\/1\/_update\r\n{\r\n  \"doc\": {\r\n    \"author\": \"\u8212\u5927\u5c11\"\r\n  }\r\n}\r\n<\/pre>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/02\/2\/5.png\" alt=\"\" width=\"680\" \/><\/p>\n<p>3.6.3 \u5220\u9664\u6587\u6863<\/p>\n<p># \u5220\u9664\u6587\u6863 \u6839\u636eid\u5220\u9664<br \/>\nDELETE \/book\/novel\/_id<\/p>\n<h3>\u56db\u3001java\u64cd\u4f5cES<\/h3>\n<p><strong>4.1 java\u8fde\u63a5ES<\/strong><\/p>\n<p><strong>1.\u521b\u5efamaven\u9879\u76ee\uff0c\u5bfc\u5165\u4f9d\u8d56\uff0cJunit\u3001lombok<\/strong><\/p>\n<pre>&lt;dependency&gt;\r\n    &lt;groupId&gt;org.elasticsearch&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;elasticsearch&lt;\/artifactId&gt;\r\n    &lt;version&gt;6.5.4&lt;\/version&gt;\r\n&lt;\/dependency&gt;\r\n&lt;dependency&gt;\r\n    &lt;groupId&gt;org.elasticsearch.client&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;elasticsearch-rest-high-level-client&lt;\/artifactId&gt;\r\n    &lt;version&gt;6.5.4&lt;\/version&gt;\r\n&lt;\/dependency&gt;<\/pre>\n<p><strong>2. \u521b\u5efa\u6d4b\u8bd5\u7c7b\uff0c\u8fde\u63a5ES<\/strong><\/p>\n<p>\u521b\u5efa\u8fde\u63a5<\/p>\n<pre>public class ESClient {\r\n    public static RestHighLevelClient getClient(){\r\n        \/\/1. \u521b\u5efa HttpHost \u5bf9\u8c61\r\n        HttpHost host=new HttpHost(\"192.168.2.123\",9200);\r\n        \/\/2. \u521b\u5efa RestClientBuilder\r\n        RestClientBuilder rb= RestClient.builder(host);\r\n        \/\/3. \u521b\u5efa RestHighLevelClient \u5bf9\u8c61\r\n        return new RestHighLevelClient(rb);\r\n    }\r\n}<\/pre>\n<p>\u6d4b\u8bd5\u8fde\u63a5<\/p>\n<pre>public class Demo {\r\n    @Test\r\n    public void testConnect(){\r\n        RestHighLevelClient client = ESClient.getClient();\r\n        System.out.println(\"OK!\");\r\n    }\r\n}<\/pre>\n<p><strong>4.2 java \u64cd\u4f5c\u7d22\u5f15<\/strong><\/p>\n<p><strong>4.2.1 java \u521b\u5efa\u7d22\u5f15<\/strong><\/p>\n<pre>public class Demo2 {\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    \/\/ number_of_replicas=1;number_of_shards=5;\r\n    @Test\r\n    public void createIndex() throws IOException {\r\n        String index=\"person2\";\r\n        String type=\"man\";\r\n        \/\/1. \u51c6\u5907\u7d22\u5f15\u7684 settings\r\n        Settings.Builder settings = Settings.builder().\r\n                put(\"number_of_replicas\", 1)\r\n                .put(\"number_of_shards\",3);\r\n        \/\/2. \u51c6\u5907\u7d22\u5f15\u7684\u7ed3\u6784 mappings\r\n        XContentBuilder mappings = JsonXContent.contentBuilder()\r\n                .startObject()\r\n                    .startObject(\"properties\")\r\n                        .startObject(\"name\")\r\n                        .field(\"type\", \"text\")\r\n                        .endObject()\r\n                        .startObject(\"age\")\r\n                        .field(\"type\", \"integer\")\r\n                        .endObject()\r\n                        .startObject(\"birthday\")\r\n                        .field(\"type\", \"date\")\r\n                        .field(\"format\", \"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\")\r\n                        .endObject()\r\n                    .endObject()\r\n                .endObject();\r\n        \/\/ 3. \u5c06 settings \u548c mappings \u5c01\u88c5\u5230\u4e00\u4e2aRequest\u5bf9\u8c61\r\n        CreateIndexRequest request = new CreateIndexRequest(index)\r\n                .settings(settings)\r\n                .mapping(type,mappings);\r\n        \/\/4. \u901a\u8fc7 client \u5bf9\u8c61\u53bb\u8fde\u63a5 ES \u5e76\u6267\u884c\u521b\u5efa\u7d22\u5f15\r\n        CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);\r\n        \/\/ 5. \u8f93\u51fa\r\n        System.out.println(\"response:\"+response.toString());\r\n    }\r\n}<\/pre>\n<p><strong>4.2.2 \u68c0\u67e5\u7d22\u5f15\u662f\u5426\u5b58\u5728<\/strong><\/p>\n<pre>@Test\r\npublic void isExists() throws IOException {\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    \/\/ 1. \u51c6\u5907 request \u5bf9\u8c61\r\n    GetIndexRequest request = new GetIndexRequest();\r\n    request.indices(\"person\");\r\n    \/\/ 2. \u901a\u8fc7 client \u64cd\u4f5c\r\n    boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);\r\n    System.out.println(exists);\r\n}<\/pre>\n<p><strong>4.2.3 \u5220\u9664\u7d22\u5f15<\/strong><\/p>\n<pre>@Test\r\npublic void del() throws IOException {\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    DeleteIndexRequest request=new DeleteIndexRequest();\r\n    request.indices(\"person\");\r\n    AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);\r\n    System.out.println(delete.isAcknowledged());\r\n}<\/pre>\n<p><strong>4.3 java \u64cd\u4f5c\u6587\u6863<\/strong><\/p>\n<p><strong>4.3.1 \u6dfb\u52a0\u6587\u6863<\/strong><\/p>\n<pre>public class Demo4 {\r\n    ObjectMapper mapper=new ObjectMapper();\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    @Test\r\n    public void createDoc() throws Exception {\r\n        \/\/ 1.\u51c6\u5907 json \u6570\u636e\r\n        Person person=new Person(1,\"\u5f20\u4e09\",23,new Date());\r\n        String json = mapper.writeValueAsString(person);\r\n        \/\/ 2. \u51c6\u5907\u4e00\u4e2a request \u5bf9\u8c61 (\u624b\u52a8\u6307\u5b9aid)\r\n        IndexRequest request=new IndexRequest(\"person\",\"man\",person.getId().toString());\r\n        request.source(json, XContentType.JSON);\r\n        \/\/ 3. \u901a\u8fc7 client \u5bf9\u8c61\u6267\u884c\u6dfb\u52a0\r\n        IndexResponse response = client.index(request, RequestOptions.DEFAULT);\r\n        System.out.println(response.getResult().toString());\r\n    }\r\n}<\/pre>\n<p><strong>4.3.2 \u4fee\u6539\u6587\u6863<\/strong><\/p>\n<pre>@Test\r\npublic void updateDoc() throws IOException {\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    \/\/1. \u521b\u5efaMap\u96c6\u5408\uff0c\u6307\u5b9a\u9700\u8981\u4fee\u6539\u7684\u5185\u5bb9\r\n    Map&lt;String,Object&gt; doc=new HashMap&lt;&gt;();\r\n    doc.put(\"name\",\"\u674e\u56db\");\r\n    String docId=\"1\";\r\n    \/\/ 2. \u521b\u5efa request \u5bf9\u8c61\uff0c\u5c01\u88c5\u6570\u636e\r\n    UpdateRequest request=new UpdateRequest(\"person\",\"man\",docId);\r\n    request.doc(doc);\r\n    \/\/ 3. \u901a\u8fc7 client \u5bf9\u8c61\u6267\u884c\r\n    UpdateResponse update = client.update(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u8f93\u51fa\u7ed3\u679c\r\n    System.out.println(update.getResult().toString());\r\n}<\/pre>\n<p><strong>4.3.3 \u5220\u9664\u6587\u6863<\/strong><\/p>\n<pre>@Test\r\npublic void deleteDoc() throws IOException {\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    DeleteRequest request=new DeleteRequest(\"person\",\"man\",\"1\");\r\n    DeleteResponse delete = client.delete(request, RequestOptions.DEFAULT);\r\n    System.out.println(delete.getResult().toString());\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>4.4 java\u6279\u91cf\u64cd\u4f5c\u6587\u6863<\/strong><\/p>\n<p><strong>4.4.1 \u6279\u91cf\u6dfb\u52a0<\/strong><\/p>\n<pre>@Test\r\npublic void bulkCreateDoc() throws Exception{\r\n    ObjectMapper mapper=new ObjectMapper();\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index=\"person\";\r\n    String type=\"man\";\r\n    \/\/ 1. \u51c6\u5907 json \u6570\u636e\r\n    Person p1=new Person(1,\"\u5f20\u4e09\",23,new Date());\r\n    Person p2=new Person(2,\"\u674e\u56db\",24,new Date());\r\n    Person p3=new Person(3,\"\u738b\u4e94\",25,new Date());\r\n    String json1 = mapper.writeValueAsString(p1);\r\n    String json2 = mapper.writeValueAsString(p2);\r\n    String json3 = mapper.writeValueAsString(p3);\r\n    \/\/ 2. \u521b\u5efa request \u5c06\u51c6\u5907\u597d\u7684\u6570\u636e\u5c01\u88c5\u8fdb\u53bb\r\n    BulkRequest request=new BulkRequest();\r\n    request.add(new IndexRequest(index,type,p1.getId().toString()).source(json1, XContentType.JSON));\r\n    request.add(new IndexRequest(index,type,p2.getId().toString()).source(json2, XContentType.JSON));\r\n    request.add(new IndexRequest(index,type,p3.getId().toString()).source(json3, XContentType.JSON));\r\n    \/\/ 3. \u7528 client \u6267\u884c\r\n    BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u8f93\u51fa\u7ed3\u679c\r\n    System.out.println(response.toString());\r\n}<\/pre>\n<p><strong>4.4.2 \u6279\u91cf\u5220\u9664<\/strong><\/p>\n<pre>@Test\r\npublic void bulkDeleteDoc() throws Exception{\r\n    ObjectMapper mapper=new ObjectMapper();\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index=\"person\";\r\n    String type=\"man\";\r\n    \/\/ 1.\u521b\u5efa request \u5bf9\u8c61\r\n    BulkRequest request=new BulkRequest();\r\n    request.add(new DeleteRequest(index,type,\"1\"));\r\n    request.add(new DeleteRequest(index,type,\"2\"));\r\n    request.add(new DeleteRequest(index,type,\"3\"));\r\n    \/\/ 2. client \u6267\u884c\r\n    BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);\r\n    \/\/ 3. \u8f93\u51fa\r\n    System.out.println(response.toString());    \r\n}<\/pre>\n<h3>\u4e94\u3001ElasticSearch \u7684\u5404\u79cd\u67e5\u8be2<\/h3>\n<p><strong>5.1 term&amp;terms\u67e5\u8be2<\/strong><\/p>\n<p>5.1.1 term \u67e5\u8be2<\/p>\n<p>term\u7684\u67e5\u8be2\u662f\u4ee3\u8868\u5b8c\u5168\u5339\u914d\uff0c\u641c\u7d22\u4e4b\u524d\u4e0d\u4f1a\u5bf9\u4f60\u641c\u7d22\u7684\u5173\u952e\u5b57\u8fdb\u884c\u5206\u8bcd\uff0c\u5bf9\u4f60\u7684\u5173\u952e\u5b57\u53bb\u6587\u6863\u5206\u8bcd\u5e93\u4e2d\u53bb\u5339\u914d\u5185\u5bb9\u3002<\/p>\n<p>terms\u662f\u5728\u9488\u5bf9\u4e00\u4e2a\u5b57\u6bb5\u5305\u542b\u591a\u4e2a\u503c\u7684\u65f6\u5019\u4f7f\u7528\u3002<\/p>\n<p>term\uff1awhere province = \u5317\u4eac;<br \/>\nterms\uff1awhere province = \u5317\u4eac or province = ? or province = ?<\/p>\n<pre># term\u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"from\":0, # limit ?\r\n  \"size\": 5,# limit x,?\r\n  \"query\": {\r\n    \"term\": {\r\n      \"province\": { # \u5b57\u6bb5\u540d\r\n        \"value\": \"\u5317\u4eac\"\r\n      }\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p>java \u67e5\u8be2\u65b9\u5f0f<\/p>\n<pre>@Test\r\npublic void term() throws IOException {\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa request \u5bf9\u8c61\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    builder.from(0);\r\n    builder.size(5);\r\n    builder.query(QueryBuilders.termQuery(\"province\",\"\u5317\u4eac\"));\r\n    request.source(builder);\r\n    \/\/ 3. \u6267\u884c\u67e5\u8be2\r\n    SearchResponse response=client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u83b7\u53d6\u5230 _source \u4e2d\u7684\u6570\u636e\u5e76\u5c55\u793a\r\n    for (SearchHit hit : response.getHits().getHits()) {\r\n        Map&lt;String, Object&gt; result = hit.getSourceAsMap();\r\n        System.out.println(result);\r\n    }\r\n}<\/pre>\n<p>5.1.2 terms\u67e5\u8be2<\/p>\n<pre># terms \u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"query\": {\r\n    \"terms\": {\r\n      \"province\": [\r\n        \"\u5317\u4eac\",\r\n        \"\u4e0a\u6d77\"\r\n      ]\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p>java\u5b9e\u73b0\u67e5\u8be2\u65b9\u5f0f<\/p>\n<pre>@Test\r\npublic void terms() throws IOException {\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa request \u5bf9\u8c61\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    builder.query(QueryBuilders.termsQuery(\"province\",\"\u5317\u4eac\",\"\u4e0a\u6d77\"));\r\n    request.source(builder);\r\n    \/\/ 3. \u6267\u884c\u67e5\u8be2\r\n    SearchResponse response=client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u83b7\u53d6\u5230 _source \u4e2d\u7684\u6570\u636e\u5e76\u5c55\u793a\r\n    for (SearchHit hit : response.getHits().getHits()) {\r\n        System.out.println(hit.getSourceAsMap());\r\n    }\r\n}<\/pre>\n<p><strong>5.2 match \u67e5\u8be2\u3010\u91cd\u70b9\u3011<\/strong><\/p>\n<p>match\u67e5\u8be2\u5c5e\u4e8e\u9ad8\u5c42\u67e5\u8be2\uff0c\u4ed6\u4f1a\u6839\u636e\u4f60\u67e5\u8be2\u7684\u5b57\u6bb5\u7c7b\u578b\u4e0d\u4e00\u6837\uff0c\u91c7\u7528\u4e0d\u540c\u7684\u67e5\u8be2\u65b9\u5f0f\u3002<br \/>\n\u67e5\u8be2\u7684\u662f\u65e5\u671f\u6216\u8005\u662f\u6570\u503c\u7684\u8bdd\uff0c\u4ed6\u4f1a\u5c06\u4f60\u57fa\u4e8e\u7684\u5b57\u7b26\u4e32\u67e5\u8be2\u5185\u5bb9\u8f6c\u6362\u4e3a\u65e5\u671f\u6216\u8005\u6570\u503c\u5bf9\u5f85\u3002<br \/>\n\u5982\u679c\u67e5\u8be2\u7684\u5185\u5bb9\u662f\u4e00\u4e2a\u4e0d\u80fd\u88ab\u5206\u8bcd\u7684\u5185\u5bb9(keyword)\uff0cmatch\u67e5\u8be2\u4e0d\u4f1a\u5bf9\u4f60\u6307\u5b9a\u7684\u67e5\u8be2\u5173\u952e\u5b57\u8fdb\u884c\u5206\u8bcd\u3002<br \/>\n\u5982\u679c\u67e5\u8be2\u7684\u5185\u5bb9\u65f6\u4e00\u4e2a\u53ef\u4ee5\u88ab\u5206\u8bcd\u7684\u5185\u5bb9(text)\uff0cmatch\u4f1a\u5c06\u4f60\u6307\u5b9a\u7684\u67e5\u8be2\u5185\u5bb9\u6839\u636e\u4e00\u5b9a\u7684\u65b9\u5f0f\u53bb\u5206\u8bcd\uff0c\u53bb\u5206\u8bcd\u5e93\u4e2d\u5339\u914d\u6307\u5b9a\u7684\u5185\u5bb9\u3002<br \/>\nmatch\u67e5\u8be2\uff0c\u5b9e\u9645\u5e95\u5c42\u5c31\u662f\u591a\u4e2aterm\u67e5\u8be2\uff0c\u5c06\u591a\u4e2aterm\u67e5\u8be2\u7684\u7ed3\u679c\u7ed9\u4f60\u5c01\u88c5\u5230\u4e86\u4e00\u8d77\u3002<\/p>\n<p><strong>5.2.1 match_all \u67e5\u8be2<\/strong><\/p>\n<p>\u67e5\u8be2\u5168\u90e8\u5185\u5bb9\uff0c\u4e0d\u6307\u5b9a\u4efb\u4f55\u67e5\u8be2\u6761\u4ef6<\/p>\n<pre># match_all \u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"query\": {\r\n    \"match_all\": {}\r\n  }\r\n}\r\n<\/pre>\n<p>java \u65b9\u5f0f\u67e5\u8be2<\/p>\n<pre>@Test\r\npublic void match_all() throws IOException {\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa request \u5bf9\u8c61\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    builder.query(QueryBuilders.matchAllQuery());\r\n    builder.size(20); \/\/ES \u9ed8\u8ba4\u53ea\u67e5\u8be210\u6761\uff0c\u5982\u60f3\u67e5\u66f4\u591a\uff0c\u6307\u5b9asize\r\n    request.source(builder);\r\n    \/\/ 3. \u6267\u884c\u67e5\u8be2\r\n    SearchResponse response=client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u8f93\u51fa\u7ed3\u679c\r\n    for (SearchHit hit : response.getHits().getHits()) {\r\n        System.out.println(hit.getSourceAsMap());\r\n    }\r\n    System.out.println(\"\u603b\u5171\u6709\"+response.getHits().getHits().length+\"\u6761\u6570\u636e\");\r\n}<\/pre>\n<p><strong>5.2.2 match \u67e5\u8be2<\/strong><\/p>\n<p>\u6307\u5b9a\u4e00\u4e2afield \u4f5c\u4e3a\u7b5b\u9009\u7684\u6761\u4ef6<\/p>\n<pre># match\u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"query\": {\r\n    \"match\": {\r\n      \"smsContent\": \"\u6536\u8d27\u5b89\u88c5\"\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p>java\u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\n    public void matchQuery() throws Exception{\r\n        RestHighLevelClient client = ESClient.getClient();\r\n        String index = \"sms-logs-index\";\r\n        String type = \"sms-logs-type\";\r\n        \/\/ 1. \u521b\u5efa request \u5bf9\u8c61\r\n        SearchRequest request=new SearchRequest(index);\r\n        request.types(type);\r\n        \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n        SearchSourceBuilder builder=new SearchSourceBuilder();\r\n        builder.query(QueryBuilders.matchQuery(\"smsContent\",\"\u6536\u8d27\u5b89\u88c5\"));\r\n        request.source(builder);\r\n        \/\/ 3. \u6267\u884c\u67e5\u8be2\r\n        SearchResponse response=client.search(request,RequestOptions.DEFAULT);\r\n        for (SearchHit hit : response.getHits().getHits()) {\r\n            System.out.println(hit.getSourceAsMap());\r\n        }\r\n        System.out.println(\"\u603b\u5171\u6709\"+response.getHits().getHits().length+\"\u6761\u6570\u636e\");\r\n    }\r\n<\/pre>\n<p><strong>5.2.3 \u5e03\u5c14 match\u67e5\u8be2<\/strong><\/p>\n<p>\u57fa\u4e8e\u4e00\u4e2a field \u5339\u914d\u7684\u5185\u5bb9\uff0c\u91c7\u7528 and\u6216\u8005 or\u7684\u65b9\u5f0f\u8fde\u63a5<\/p>\n<pre># \u5e03\u5c14 match \u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"query\": {\r\n    \"match\": {\r\n      \"smsContent\": {\r\n        \"query\": \"\u4e2d\u56fd \u5065\u5eb7\",\r\n        \"operator\": \"or\"\r\n      }\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p>java \u65b9\u5f0f\u67e5\u8be2<\/p>\n<pre>@Test\r\npublic void booleanMatchQuery() throws Exception{\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa request \u5bf9\u8c61\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    builder.query(QueryBuilders.matchQuery(\"smsContent\",\"\u4e2d\u56fd \u5065\u5eb7\")<strong>.operator(Operator.OR)<\/strong>);\r\n    request.source(builder);\r\n    \/\/ 3. \u6267\u884c\u67e5\u8be2\r\n    SearchResponse response=client.search(request,RequestOptions.DEFAULT);\r\n    for (SearchHit hit : response.getHits().getHits()) {\r\n        System.out.println(hit.getSourceAsMap());\r\n    }\r\n    System.out.println(\"\u603b\u5171\u6709\"+response.getHits().getHits().length+\"\u6761\u6570\u636e\");\r\n}<\/pre>\n<p><strong>5.2.4 multi_match\u67e5\u8be2<\/strong><\/p>\n<p>match\u9488\u5bf9\u4e00\u4e2afield\u505a\u68c0\u7d22\uff0cmulti_match\u9488\u5bf9\u591a\u4e2a field \u8fdb\u884c\u68c0\u7d22\uff0c\u591a\u4e2a field \u5bf9\u5e94\u4e00\u4e2atext<\/p>\n<pre># multi_match \u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"query\": {\r\n    \"multi_match\": {\r\n      \"query\": \"\u5317\u4eac\",\r\n      \"fields\": [\"province\",\"smsContent\"]\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p>java \u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void multiMatchQuery() throws Exception{\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa request \u5bf9\u8c61\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    builder.query(QueryBuilders.multiMatchQuery(\"\u5317\u4eac\",\"province\",\"smsContent\"));\r\n    request.source(builder);\r\n    \/\/ 3. \u6267\u884c\u67e5\u8be2\r\n    SearchResponse response=client.search(request,RequestOptions.DEFAULT);\r\n    for (SearchHit hit : response.getHits().getHits()) {\r\n        System.out.println(hit.getSourceAsMap());\r\n    }\r\n    System.out.println(\"\u603b\u5171\u6709\"+response.getHits().getHits().length+\"\u6761\u6570\u636e\");\r\n}<\/pre>\n<p><strong>5.3 \u5176\u4ed6\u67e5\u8be2<\/strong><\/p>\n<p>5.3.1 id\u67e5\u8be2<\/p>\n<p>\u6839\u636eid\u67e5\u8be2\uff0c\u7c7b\u4f3c\u4e8emysql\u4e2d where id=?<\/p>\n<p># id \u67e5\u8be2<br \/>\nGET \/sms-logs-index\/sms-logs-type\/24<\/p>\n<p>java\u4ee3\u7801\u67e5\u8be2<\/p>\n<pre>@Test\r\npublic void getId() throws IOException {\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1.\u521b\u5efa GetRequest \u5bf9\u8c61\r\n    GetRequest request=new GetRequest(index,type,\"24\");\r\n    \/\/ 2. \u6267\u884c\u67e5\u8be2\r\n    GetResponse response = client.get(request, RequestOptions.DEFAULT);\r\n    \/\/ 3. \u8f93\u51fa\u7ed3\u679c\r\n    System.out.println(response.getSourceAsMap());\r\n}<\/pre>\n<p><strong>5.3.2 ids\u67e5\u8be2<\/strong><\/p>\n<p>\u6839\u636e\u591a\u4e2aid\u67e5\u8be2\uff0c\u7c7b\u4f3cmysql\u4e2d where id in (id1,id2,id3&#8230;)<\/p>\n<pre># ids\u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"query\": {\r\n    \"ids\": {\r\n      \"values\": [\"24\",\"25\",\"27\"]\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p>java \u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void getIds() throws IOException {\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa SearchRequest\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    builder.query(<strong>QueryBuilders.idsQuery().addIds(\"24\",\"25\",\"27\")<\/strong>);\r\n    request.source(builder);\r\n    \/\/ 3. \u6267\u884c\r\n    SearchResponse response = client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u8f93\u51fa\u7ed3\u679c\r\n    for (SearchHit hit : response.getHits().getHits()) {\r\n        System.out.println(hit.getSourceAsMap());\r\n    }\r\n    System.out.println(response.getHits().getHits().length);\r\n}<\/pre>\n<p><strong>5.3.3 prefix \u67e5\u8be2<\/strong><\/p>\n<p>\u524d\u7f00\u67e5\u8be2\uff0c\u53ef\u4ee5\u901a\u8fc7\u4e00\u4e2a \u5173\u952e\u5b57 \u53bb\u6307\u5b9a\u4e00\u4e2a field \u7684\u524d\u7f00\uff0c\u4ece\u800c\u67e5\u8be2\u5230\u6307\u5b9a\u7684\u6587\u6863<\/p>\n<pre># prefix \u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"query\": {\r\n    \"prefix\": {\r\n      \"corpName\": {\r\n        \"value\": \"\u6ef4\u6ef4\"\r\n      }\r\n    }\r\n  }\r\n}<\/pre>\n<p>java\u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void getIdsByPrefix() throws IOException {\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa SearchRequest\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    builder.query(<strong>QueryBuilders.prefixQuery(\"corpName\",\"\u6ef4\u6ef4\")<\/strong>);\r\n    request.source(builder);\r\n    \/\/ 3. \u6267\u884c\r\n    SearchResponse response = client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u8f93\u51fa\u7ed3\u679c\r\n    for (SearchHit hit : response.getHits().getHits()) {\r\n        System.out.println(hit.getSourceAsMap());\r\n    }\r\n    System.out.println(response.getHits().getHits().length);\r\n}<\/pre>\n<p><strong>5.3.4 fuzzy \u67e5\u8be2<\/strong><\/p>\n<p>\u6a21\u7cca\u67e5\u8be2\uff0cES\u6839\u636e\u8f93\u5165\u7684\u5185\u5bb9\u5927\u6982\u53bb\u5339\u914d\u4e00\u4e0b\u7ed3\u679c<\/p>\n<pre># fuzzy \u6a21\u7cca\u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"query\": {\r\n    \"fuzzy\": {\r\n      \"corpName\": {\r\n        \"value\": \"\u6ef4\u6ef4\",\r\n        \"prefix_length\": 2\r\n      }\r\n    }\r\n  }\r\n}<\/pre>\n<p>java \u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void getIdsByFuzzy() throws IOException {\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa SearchRequest\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    builder.query(<strong>QueryBuilders.fuzzyQuery(\"corpName\",\"\u6ef4\u6ef4\").prefixLength(2)<\/strong>);\r\n    request.source(builder);\r\n    \/\/ 3. \u6267\u884c\r\n    SearchResponse response = client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u8f93\u51fa\u7ed3\u679c\r\n    for (SearchHit hit : response.getHits().getHits()) {\r\n        System.out.println(hit.getSourceAsMap());\r\n    }\r\n    System.out.println(response.getHits().getHits().length);\r\n}<\/pre>\n<p><strong>5.3.5 wildcard \u67e5\u8be2<\/strong><\/p>\n<p>\u901a\u914d\u7b26\u67e5\u8be2\uff0c\u548cmysql\u4e2d\u7684like\u5dee\u4e0d\u591a\uff0c\u53ef\u4ee5\u5728\u67e5\u8be2\u65f6\uff0c\u5728\u5b57\u7b26\u4e32\u4e2d\u6307\u5b9a\u901a\u914d\u7b26 * \u548c\u5360\u4f4d\u7b26 ?<\/p>\n<pre># wildcard \u6a21\u7cca\u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"query\": {\r\n    \"wildcard\": {\r\n      \"corpName\": {\r\n        \"value\": \"\u4e2d\u56fd??\"\r\n      }\r\n    }\r\n  }\r\n}<\/pre>\n<p>java\u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void getIdsByWildCard() throws IOException {\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa SearchRequest\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    <strong>builder.query(QueryBuilders.wildcardQuery(\"corpName\",\"\u4e2d\u56fd*\"));<\/strong>\r\n    request.source(builder);\r\n    \/\/ 3. \u6267\u884c\r\n    SearchResponse response = client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u8f93\u51fa\u7ed3\u679c\r\n    for (SearchHit hit : response.getHits().getHits()) {\r\n        System.out.println(hit.getSourceAsMap());\r\n    }\r\n    System.out.println(response.getHits().getHits().length);\r\n}<\/pre>\n<p><strong>5.3.6 range\u67e5\u8be2<\/strong><\/p>\n<p>\u8303\u56f4\u67e5\u8be2\uff0c\u53ea\u9488\u5bf9\u6570\u503c\u7c7b\u578b\uff0c\u5bf9\u67d0\u4e00\u4e2a field \u8fdb\u884c\u5927\u4e8e\u6216\u8005\u5c0f\u4e8e\u7684\u8303\u56f4\u6307\u5b9a<\/p>\n<pre># range\u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"query\": {\r\n    \"range\": {\r\n      \"replyTotal\": {\r\n        \"gte\": 20,\r\n        \"lte\": 50\r\n      }\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p>java \u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void getIdsByRange() throws IOException {\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa SearchRequest\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    builder.query(QueryBuilders.rangeQuery(\"replyTotal\").gte(20).lte(50));\r\n    request.source(builder);\r\n    \/\/ 3. \u6267\u884c\r\n    SearchResponse response = client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u8f93\u51fa\u7ed3\u679c\r\n    for (SearchHit hit : response.getHits().getHits()) {\r\n        System.out.println(hit.getSourceAsMap());\r\n    }\r\n    System.out.println(response.getHits().getHits().length);\r\n}<\/pre>\n<p><strong>5.3.7 regexp \u6b63\u5219\u67e5\u8be2<\/strong><\/p>\n<pre># regexp \u6b63\u5219\u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"query\": {\r\n    \"regexp\": {\r\n      \"mobile\": \"180[0-9]{8}\"\r\n    }\r\n  }\r\n}<\/pre>\n<p>java \u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void getIdsByRegexp() throws IOException {\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa SearchRequest\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    builder.query(QueryBuilders.regexpQuery(\"mobile\",\"180[0-9]{8}\"));\r\n    request.source(builder);\r\n    \/\/ 3. \u6267\u884c\r\n    SearchResponse response = client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u8f93\u51fa\u7ed3\u679c\r\n    for (SearchHit hit : response.getHits().getHits()) {\r\n        System.out.println(hit.getSourceAsMap());\r\n    }\r\n    System.out.println(response.getHits().getHits().length);\r\n}<\/pre>\n<p><strong>5.4 \u6df1\u5206\u9875Scroll<\/strong><\/p>\n<p>ES\u5bf9 from+size \u662f\u6709\u9650\u5236\u7684\uff0cfrom\u548csize\u4e8c\u8005\u4e4b\u548c\u4e0d\u80fd\u8d85\u8fc71w<\/p>\n<p>\u539f\u7406\uff1afrom+size \u5728ES\u67e5\u8be2\u6570\u636e\u7684\u65b9\u5f0f\uff1a<\/p>\n<p>1.\u5148\u5c06\u7528\u6237\u6307\u5b9a\u7684\u5173\u952e\u8bcd\u8fdb\u884c\u5206\u8bcd<br \/>\n2.\u5c06\u8bcd\u6c47\u53bb\u5206\u8bcd\u5e93\u4e2d\u8fdb\u884c\u68c0\u7d22\uff0c\u5f97\u5230\u591a\u4e2a\u6587\u6863id<br \/>\n3.\u53bb\u5404\u4e2a\u5206\u7247\u4e2d\u53bb\u62c9\u53d6\u6307\u5b9a\u7684\u6570\u636e(\u8017\u65f6\u8f83\u957f)<br \/>\n4.\u5c06\u6570\u636e\u6839\u636escore\u8fdb\u884c\u6392\u5e8f(\u8017\u65f6\u8f83\u957f)<br \/>\n5.\u6839\u636efrom\u503c\uff0c\u5c06\u67e5\u8be2\u5230\u7684\u6570\u636e\u820d\u5f03\u4e00\u90e8\u5206<br \/>\n6.\u8fd4\u56de\u7ed3\u679c\u3002<\/p>\n<p>Scroll+size \u5728 ES\u67e5\u8be2\u6570\u636e\u7684\u65b9\u5f0f\uff1a<\/p>\n<p>1.\u5148\u5c06\u7528\u6237\u6307\u5b9a\u7684\u5173\u952e\u8bcd\u8fdb\u884c\u5206\u8bcd<br \/>\n2.\u5c06\u8bcd\u6c47\u53bb\u5206\u8bcd\u5e93\u4e2d\u8fdb\u884c\u68c0\u7d22\uff0c\u5f97\u5230\u591a\u4e2a\u6587\u6863id<br \/>\n3.\u5c06\u6587\u6863\u7684id\u5b58\u653e\u5728\u4e00\u4e2aES\u7684\u4e0a\u4e0b\u6587\u4e2d<br \/>\n4.\u6839\u636e\u4f60\u6307\u5b9a\u7684size\u7684\u4e2a\u6570\u53bbES\u4e2d\u68c0\u7d22\u6307\u5b9a\u4e2a\u6570\u7684\u6570\u636e\uff0c\u62ff\u5b8c\u6570\u636e\u7684\u6587\u6863id\uff0c\u4f1a\u4ece\u4e0a\u4e0b\u6587\u4e2d\u79fb\u9664<br \/>\n5.\u5982\u679c\u9700\u8981\u4e0b\u4e00\u9875\u6570\u636e\uff0c\u76f4\u63a5\u53bbES\u7684\u4e0a\u4e0b\u6587\u4e2d\u627e\u540e\u7eed\u5185\u5bb9\u3002<br \/>\n6.\u5faa\u73af\u7b2c\u56db\u6b65\u548c\u7b2c\u4e94\u6b65<\/p>\n<p><strong>Scroll\u67e5\u8be2\u65b9\u5f0f\u4e0d\u9002\u5408\u5b9e\u65f6\u67e5\u8be2<\/strong><\/p>\n<p>\u6267\u884cscroll\u67e5\u8be2\uff0c\u8fd4\u56de\u7b2c\u4e00\u9875\u6570\u636e\uff0c\u5e76\u4e14\u5c06\u6587\u6863id\u4fe1\u606f\u5b58\u653e\u5728ES\u4e0a\u4e0b\u6587\u4e2d\uff0c\u6307\u5b9a\u751f\u5b58\u65f6\u95f4 1m<\/p>\n<pre># scroll\r\nPOST \/sms-logs-index\/sms-logs-type\/_search?scroll=1m\r\n{\r\n  \"query\": {\r\n    \"match_all\": {}\r\n  },\r\n  \"size\": 5,\r\n  \"sort\": [\r\n    {\r\n      \"fee\": {\r\n        \"order\": \"desc\"\r\n      }\r\n    }\r\n  ]\r\n}\r\n\r\n# \u6839\u636escroll\u67e5\u8be2\u4e0b\u4e00\u9875\u6570\u636e\r\nPOST \/_search\/scroll\r\n{\r\n  \"scroll\":\"1m\",\r\n  \"scroll_id\":\r\n  \"id\"\r\n}\r\n\r\n# \u5220\u9664scroll\u5728ES\u4e0a\u4e0b\u6587\u4e2d\u7684\u6570\u636e\r\nDELETE \/_search\/scroll\/id\r\n<\/pre>\n<p>java\u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void scrollQuery() throws Exception{\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa SearchRequest\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a scroll \u4fe1\u606f\r\n    request.scroll(TimeValue.timeValueMinutes(1L));\r\n    \/\/ 3. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    builder.size(5);\r\n    builder.sort(\"fee\", SortOrder.DESC);\r\n    builder.query(QueryBuilders.matchAllQuery());\r\n    request.source(builder);\r\n    \/\/ 4. \u83b7\u53d6\u8fd4\u56de\u7ed3\u679c scrollId\uff0csource\r\n    SearchResponse response = client.search(request, RequestOptions.DEFAULT);\r\n    String scrollId = response.getScrollId();\r\n    System.out.println(\"\u9996\u9875\");\r\n    for (SearchHit hit : response.getHits().getHits()) {\r\n        System.out.println(hit.getSourceAsMap());\r\n    }\r\n    while (true) {\r\n        \/\/ 5. \u5faa\u73af--&gt; \u521b\u5efa SearchScrollRequest\r\n        SearchScrollRequest scrollRequest=new SearchScrollRequest(scrollId);\r\n        \/\/ 6. \u6307\u5b9a scrollId\r\n        scrollRequest.scroll(TimeValue.timeValueMinutes(1L));\r\n        \/\/ 7. \u6267\u884c\u67e5\u8be2\u83b7\u53d6\u8fd4\u56de\u7ed3\u679c\r\n        SearchResponse searchResponse=client.scroll(scrollRequest,RequestOptions.DEFAULT);\r\n        \/\/ 8. \u5224\u65ad\u662f\u5426\u67e5\u8be2\u5230\u4e86\u6570\u636e\uff0c\u8f93\u51fa\r\n        SearchHit[] hits = searchResponse.getHits().getHits();\r\n        if (hits.length &gt; 0 &amp;&amp; hits != null) {\r\n            System.out.println(\"\u4e0b\u4e00\u9875\");\r\n            for (SearchHit hit : hits) {\r\n                System.out.println(hit.getSourceAsMap());\r\n            }\r\n        }else {\r\n            \/\/ 9. \u5224\u65ad\u6ca1\u6709\u67e5\u8be2\u5230\u6570\u636e--&gt;\u9000\u51fa\u5faa\u73af\r\n            System.out.println(\"\u7ed3\u675f\");\r\n            break;\r\n        }\r\n    }\r\n    \/\/ 10. \u521b\u5efa ClearScrollRequest\r\n    ClearScrollRequest clearScrollRequest=new ClearScrollRequest();\r\n    \/\/ 11. \u6307\u5b9a scrollId\r\n    clearScrollRequest.addScrollId(scrollId);\r\n    \/\/ 12. \u5220\u9664 scrollId\r\n    ClearScrollResponse clearScrollResponse = client.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);\r\n    System.out.println(\"\u5220\u9664scroll\uff1a\"+clearScrollResponse.isSucceeded());\r\n}<\/pre>\n<p><strong>5.5 delete-by-query<\/strong><\/p>\n<p>\u6839\u636eterm\uff0cmatch\u7b49\u67e5\u8be2\u65b9\u5f0f\u53bb\u5220\u9664\u5927\u91cf\u6587\u6863<\/p>\n<pre># delete-by-query\r\nPOST \/sms-logs-index\/sms-logs-type\/_delete_by_query\r\n{\r\n  \"query\": {\r\n    \"range\": {\r\n      \"fee\": {\r\n        \"lt\": 4\r\n      }\r\n    }\r\n  }\r\n}<\/pre>\n<p>java \u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void deleteByQuery() throws Exception{\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa DeleteByQueryRequest\r\n    DeleteByQueryRequest request=new DeleteByQueryRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u68c0\u7d22\u7684\u6761\u4ef6\r\n    request.setQuery(QueryBuilders.rangeQuery(\"fee\").lt(4));\r\n    \/\/ 3. \u6267\u884c\u5220\u9664\r\n    BulkByScrollResponse response = client.deleteByQuery(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u8f93\u51fa\u8fd4\u56de\u7ed3\u679c\r\n    System.out.println(response.toString());\r\n}<\/pre>\n<p><strong>5.6 \u590d\u5408\u67e5\u8be2<\/strong><\/p>\n<p><strong>5.6.1 bool\u67e5\u8be2<\/strong><\/p>\n<p>\u590d\u5408\u8fc7\u6ee4\u5668\uff0c\u5c06\u4f60\u7684\u591a\u4e2a\u67e5\u8be2\u6761\u4ef6\uff0c\u4ee5\u4e00\u5b9a\u7684\u903b\u8f91\u7ec4\u5408\u5728\u4e00\u8d77<\/p>\n<p>must\uff1a\u6240\u6709\u7684\u6761\u4ef6\uff0c\u7528must\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u8868\u793aand\u7684\u610f\u601d<br \/>\nmust_not\uff1a\u5c06 must_not\u4e2d\u7684\u6761\u4ef6\uff0c\u5168\u90e8\u90fd\u4e0d\u80fd\u5339\u914d\uff0c\u8868\u793anot\u7684\u610f\u601d<br \/>\nshould\uff1a\u6240\u6709\u7684\u6761\u4ef6\uff0c\u7528should\u7ec4\u5408\u5728\u4e00\u8d77\uff0c\u8868\u793a or\u7684\u610f\u601d<\/p>\n<pre># \u67e5\u8be2\u7701\u4efd\u4e3a\u6b66\u6c49\u6216\u8005\u5317\u4eac\r\n# \u8fd0\u8425\u5546\u4e0d\u662f\u8054\u901a\r\n# SMSContent\u4e2d\u5305\u542b\u4e2d\u56fd\u548c\u5e73\u5b89\r\n# bool\u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"query\": {\r\n    \"bool\": {\r\n      \"should\": [\r\n        {\r\n          \"term\": {\r\n            \"province\": {\r\n              \"value\": \"\u6b66\u6c49\"\r\n            }\r\n          }\r\n        },{\r\n          \"term\": {\r\n            \"province\": {\r\n              \"value\": \"\u5317\u4eac\"\r\n            }\r\n          }\r\n        }\r\n      ],\"must_not\": [\r\n        {\r\n          \"term\": {\r\n            \"operatorId\": {\r\n              \"value\": \"2\"\r\n            }\r\n          }\r\n        }\r\n      ],\"must\": [\r\n        {\r\n          \"match\": {\r\n            \"smsContent\": {\r\n              \"query\": \"\u4e2d\u56fd \u5e73\u5b89\",\r\n              \"operator\": \"and\"\r\n            }\r\n          }\r\n        }\r\n      ]\r\n    }\r\n  }\r\n}<\/pre>\n<p>java \u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void boolQuery() throws Exception{\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa SearchRequest\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    BoolQueryBuilder bool = QueryBuilders.boolQuery();\r\n    bool.should(QueryBuilders.termQuery(\"province\",\"\u6b66\u6c49\"));\r\n    bool.should(QueryBuilders.termQuery(\"province\",\"\u5317\u4eac\"));\r\n    bool.mustNot(QueryBuilders.termQuery(\"operatorId\",2));\r\n    bool.must(QueryBuilders.matchQuery(\"smsContent\",\"\u4e2d\u56fd \u5e73\u5b89\").operator(Operator.AND));\r\n    request.source(builder.query(bool));\r\n    \/\/ 3. \u6267\u884c\u67e5\u8be2\r\n    SearchResponse response=client.search(request,RequestOptions.DEFAULT);\r\n    \/\/ 4. \u8f93\u51fa\u7ed3\u679c\r\n    for (SearchHit hit : response.getHits().getHits()) {\r\n        System.out.println(hit.getSourceAsMap());\r\n    }\r\n    System.out.println(response.getHits().getHits().length);\r\n}<\/pre>\n<p><strong>5.6.2 boosting \u67e5\u8be2<\/strong><\/p>\n<p>bootsting\u67e5\u8be2\u53ef\u4ee5\u5e2e\u52a9\u6211\u4eec\u53bb\u5f71\u54cd\u67e5\u8be2\u540e\u7684score<\/p>\n<p>positive\uff1a\u53ea\u6709\u5339\u914d\u4e0apositive\u7684\u67e5\u8be2\u7684\u5185\u5bb9\uff0c\u624d\u4f1a\u88ab\u653e\u5230\u8fd4\u56de\u7684\u7ed3\u679c\u96c6\u4e2d<br \/>\nnegative\uff1a\u5982\u679c\u5339\u914d\u4e0a\u548cpositive\u5e76\u4e14\u4e5f\u5339\u914d\u4e0a\u4e86negative\uff0c\u5c31\u53ef\u4ee5\u964d\u4f4e\u8fd9\u6837\u7684\u6587\u6863score<br \/>\nnegative_boost\uff1a\u6307\u5b9a\u7cfb\u6570\uff0c\u5fc5\u987b\u5c0f\u4e8e1.0<\/p>\n<p>\u5173\u4e8e\u67e5\u8be2\u65f6\uff0c\u5206\u6570\u662f\u5982\u4f55\u8ba1\u7b97\u7684\uff1a<\/p>\n<p>\u641c\u7d22\u7684\u5173\u952e\u5b57\u5728\u6587\u6863\u4e2d\u51fa\u73b0\u7684\u9891\u6b21\u8d8a\u9ad8\uff0c\u5206\u6570\u5c31\u8d8a\u9ad8<br \/>\n\u6307\u5b9a\u7684\u6587\u6863\u5185\u5bb9\u8d8a\u77ed\uff0c\u5206\u6570\u5c31\u8d8a\u9ad8<br \/>\n\u6211\u4eec\u5728\u641c\u7d22\u65f6\uff0c\u6307\u5b9a\u7684\u5173\u952e\u5b57\u4e5f\u4f1a\u88ab\u5206\u8bcd\uff0c\u8fd9\u4e2a\u88ab\u5206\u8bcd\u7684\u5185\u5bb9\uff0c\u88ab\u5206\u8bcd\u5e93\u5339\u914d\u7684\u4e2a\u6570\u8d8a\u591a\uff0c\u5206\u6570\u8d8a\u9ad8\u3002<\/p>\n<pre># bootsting \u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"query\": {\r\n    \"boosting\": {\r\n      \"positive\": {\r\n        \"match\": {\r\n          \"smsContent\": \"\u6536\u8d27\u5b89\u88c5\"\r\n        }\r\n      },\"negative\": {\r\n        \"match\": {\r\n          \"smsContent\": \"\u5f20\u4e09\"\r\n        }\r\n      },\"negative_boost\": 0.5\r\n    }\r\n  }\r\n}<\/pre>\n<p>java\u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void bootStingQuery() throws Exception{\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa SearchRequest\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    BoostingQueryBuilder queryBuilder = QueryBuilders.boostingQuery(\r\n            QueryBuilders.matchQuery(\"smsContent\", \"\u6536\u8d27\u5b89\u88c5\"),\r\n            QueryBuilders.matchQuery(\"smsContent\", \"\u5f20\u4e09\")\r\n    );\r\n    queryBuilder.negativeBoost(0.5F);\r\n    request.source(builder.query(queryBuilder));\r\n    \/\/ 3. \u6267\u884c\u67e5\u8be2\r\n    SearchResponse response = client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u8f93\u51fa\u7ed3\u679c\r\n    for (SearchHit hit : response.getHits().getHits()) {\r\n        System.out.println(hit.getSourceAsMap());\r\n    }\r\n    System.out.println(response.getHits().getHits().length);\r\n}<\/pre>\n<p><strong>5.7 filter\u67e5\u8be2<\/strong><\/p>\n<p>query\uff1a\u6839\u636e\u4f60\u7684\u67e5\u8be2\u6761\u4ef6\uff0c\u53bb\u8ba1\u7b97\u6587\u6863\u7684\u5339\u914d\u5ea6\u5f97\u5230\u4e00\u4e2a\u5206\u6570\uff0c\u5e76\u4e14\u6839\u636e\u5206\u6570\u8fdb\u884c\u6392\u5e8f\uff0c\u4e0d\u4f1a\u505a\u7f13\u5b58<br \/>\nfilter\uff1a\u6839\u636e\u4f60\u7684\u67e5\u8be2\u6761\u4ef6\u67e5\u8be2\u6587\u6863\uff0c\u4e0d\u53bb\u8ba1\u7b97\u5206\u6570\uff0c\u800c\u4e14filter\u4f1a\u5bf9\u7ecf\u5e38\u88ab\u8fc7\u6ee4\u7684\u6570\u636e\u8fdb\u884c\u7f13\u5b58<\/p>\n<pre># filter\u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"query\": {\r\n    \"bool\": {\r\n      \"filter\": [\r\n        {\r\n          \"term\":{\r\n            \"corpName\":\"\u62db\u5546\u94f6\u884c\"\r\n          }\r\n        },\r\n        {\r\n          \"range\":{\r\n            \"fee\":{\r\n              \"lte\":9\r\n            }\r\n          }\r\n        }\r\n        ]\r\n    }\r\n  }\r\n}<\/pre>\n<p>java \u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void FilterQuery() throws Exception{\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa SearchRequest\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    BoolQueryBuilder bool = QueryBuilders.boolQuery();\r\n    bool.filter(QueryBuilders.termQuery(\"corpName\",\"\u62db\u5546\u94f6\u884c\"));\r\n    bool.filter(QueryBuilders.rangeQuery(\"fee\").lte(8));\r\n    request.source(builder.query(bool));\r\n    \/\/ 3. \u6267\u884c\u67e5\u8be2\r\n    SearchResponse response = client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u8f93\u51fa\u7ed3\u679c\r\n    for (SearchHit hit : response.getHits().getHits()) {\r\n        System.out.println(hit.getSourceAsMap());\r\n    }\r\n    System.out.println(response.getHits().getHits().length);\r\n}<\/pre>\n<p><strong>5.8 \u9ad8\u4eae\u67e5\u8be2<\/strong><\/p>\n<p>\u9ad8\u4eae\u67e5\u8be2\u5c31\u662f\u5c06\u7528\u6237\u8f93\u5165\u7684\u5173\u952e\u5b57\uff0c\u4ee5\u4e00\u5b9a\u7684\u7279\u6b8a\u6837\u5f0f\u5c55\u793a\u7ed9\u7528\u6237\uff0c\u8ba9\u7528\u6237\u77e5\u9053\u4e3a\u4ec0\u4e48\u8fd9\u4e2a\u7ed3\u679c\u88ab\u68c0\u7d22\u51fa\u6765\u3002<\/p>\n<p>\u9ad8\u4eae\u5c55\u793a\u7684\u6570\u636e\uff0c\u672c\u8eab\u5c31\u662f\u6587\u6863\u4e2d\u7684\u4e00\u4e2afield\uff0c\u5355\u72ec\u5c06\u5f53\u524dfield\u4ee5highlight\u7684\u5f62\u5f0f\u8fd4\u56de\u7ed9\u4f60\u3002<\/p>\n<p>ES\u63d0\u4f9b\u4e86highlight\u5c5e\u6027\uff0c\u548cquery\u540c\u7ea7\u522b\u7684<\/p>\n<p>fragment_size\uff1a\u6307\u5b9a\u9ad8\u4eae\u6570\u636e\u5c55\u793a\u591a\u5c11\u4e2a\u5b57\u7b26<br \/>\npre_tags\uff1a\u6307\u5b9a\u524d\u7f00\u6807\u7b7e\uff0c&lt;font color=&#8221;red&#8221;&gt;<br \/>\npost_tags\uff1a\u6307\u5b9a\u540e\u7f00\u6807\u7b7e\uff0c&lt;\/font&gt;<br \/>\nfields\uff1a\u6307\u5b9a\u54ea\u51e0\u4e2afield\u4ee5\u9ad8\u4eae\u5f62\u5f0f\u8fd4\u56de<\/p>\n<pre># highlight \u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"query\": {\r\n    \"match\": {\r\n      \"smsContent\": \"\u76d2\u9a6c\"\r\n    }\r\n  },\r\n  \"highlight\": {\r\n    \"fields\": {\r\n      \"smsContent\": {}\r\n    },\r\n    \"pre_tags\": \"&lt;font color='red'&gt;\",\r\n    \"post_tags\": \"&lt;\/font&gt;\",\r\n    \"fragment_size\": 10\r\n  }\r\n}<\/pre>\n<p>java\u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void highlightQuery() throws Exception{\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa SearchRequest \u5bf9\u8c61\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6 (\u9ad8\u4eae)\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    \/\/ 2.1 \u6307\u5b9a\u67e5\u8be2\u6761\u4ef6\r\n    builder.query(QueryBuilders.matchQuery(\"smsContent\", \"\u76d2\u9a6c\"));\r\n    \/\/ 2.2 \u6307\u5b9a\u9ad8\u4eae\r\n    HighlightBuilder highlightBuilder = new HighlightBuilder();\r\n    highlightBuilder.field(\"smsContent\",10)\r\n            .preTags(\"&lt;font color='red'&gt;\")\r\n            .postTags(\"&lt;\/font&gt;\");\r\n    request.source(builder.highlighter(highlightBuilder));\r\n    \/\/ 3. \u6267\u884c\u67e5\u8be2\r\n    SearchResponse response = client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u83b7\u53d6\u9ad8\u4eae\u6570\u636e\uff0c\u8f93\u51fa\r\n    SearchHit[] hits = response.getHits().getHits();\r\n    for (SearchHit hit : hits) {\r\n        System.out.println(hit.getHighlightFields().get(\"smsContent\"));\r\n    }\r\n    System.out.println(hits.length);\r\n}<\/pre>\n<p><strong>5.9 \u805a\u5408\u67e5\u8be2<\/strong><\/p>\n<p>ES\u7684\u805a\u5408\u67e5\u8be2\u548cmysql\u7684\u805a\u5408\u67e5\u8be2\u7c7b\u4f3c\uff0cES\u7684\u805a\u5408\u67e5\u8be2\u76f8\u6bd4mysql\u8981\u5f3a\u5927\u7684\u591a\uff0cES\u63d0\u4f9b\u7684\u7edf\u8ba1\u6570\u636e\u7684\u65b9\u5f0f\u591a\u79cd\u591a\u6837\u3002<\/p>\n<p># ES\u805a\u5408\u67e5\u8be2\u7684RESTful\u8bed\u6cd5<br \/>\nPOST \/index\/type_search<\/p>\n<pre>{\r\n    \"aggs\":{\r\n        \"\u540d\u5b57(agg)\":{\r\n            \"agg_type\":{\r\n                \"\u5c5e\u6027\":\"\u503c\"\r\n            }\r\n        }\r\n    }\r\n}<\/pre>\n<p><strong>5.9.1 \u53bb\u91cd\u8ba1\u6570\u67e5\u8be2<\/strong><\/p>\n<p>\u53bb\u91cd\u8ba1\u6570\uff0c\u5373Cardinality \uff0c\u7b2c\u4e00\u6b65\u5148\u5c06\u8fd4\u56de\u7684\u6587\u6863\u4e2d\u7684\u4e00\u4e2a\u6307\u5b9a\u7684field\u8fdb\u884c\u53bb\u91cd\uff0c\u7edf\u8ba1\u4e00\u5171\u6709\u591a\u5c11\u6761\u3002<\/p>\n<pre># \u53bb\u91cd\u8ba1\u6570 \u5317\u4eac \u6b66\u6c49 \u4e0a\u6d77 \u5c71\u897f\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"aggs\": {\r\n    \"agg\": {\r\n      \"cardinality\": {\r\n        \"field\": \"province\"\r\n      }\r\n    }\r\n  }\r\n}<\/pre>\n<p>java \u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void aggQuery() throws Exception{\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa SearchRequest \u5bf9\u8c61\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u4f7f\u7528\u7684\u805a\u5408\u67e5\u8be2\u65b9\u5f0f\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    builder.aggregation(AggregationBuilders.cardinality(\"agg\").field(\"province\"));\r\n    request.source(builder);\r\n    \/\/ 3. \u6267\u884c\u67e5\u8be2\r\n    SearchResponse response = client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u83b7\u53d6\u8fd4\u56de\u7ed3\u679c\r\n    Cardinality agg = response.getAggregations().get(\"agg\");\r\n    System.out.println(agg.getValue());\r\n}<\/pre>\n<p><strong>5.9.2\u00a0 \u8303\u56f4\u7edf\u8ba1<\/strong><\/p>\n<p>\u7edf\u8ba1\u4e00\u5b9a\u8303\u56f4\u5185\u51fa\u73b0\u7684\u6587\u6863\u4e2a\u6570\uff0c\u6bd4\u5982\u9488\u5bf9\u67d0\u4e00\u4e2afield\u7684\u503c\u57280~100,100~200,200~300\u4e4b\u95f4\u6587\u6863\u51fa\u73b0\u7684\u4e2a\u6570\u5206\u522b\u662f\u591a\u5c11<\/p>\n<p>\u8303\u56f4\u7edf\u8ba1\u53ef\u4ee5\u9488\u5bf9\u666e\u901a\u7684\u6570\u503c\uff0c\u9488\u5bf9\u65f6\u95f4\u7c7b\u578b\uff0c\u9488\u5bf9ip\u7c7b\u578b\u90fd\u53ef\u4ee5\u505a\u51fa\u76f8\u5e94\u7684\u7edf\u8ba1\u3002<\/p>\n<p>range,date_range,ip_range<\/p>\n<pre># \u6570\u503c\u65b9\u5f0f\u8303\u56f4\u7edf\u8ba1\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"aggs\": {\r\n    \"agg\": {\r\n      \"range\": {\r\n        \"field\": \"fee\",\r\n        \"ranges\": [\r\n          {\r\n            \"to\": 5\r\n          },\r\n          {\r\n            \"from\": 5,\r\n            \"to\": 10\r\n          },\r\n          {\r\n            \"from\": 10\r\n          }\r\n        ]\r\n      }\r\n    }\r\n  }\r\n}<\/pre>\n<pre># \u65f6\u95f4\u65b9\u5f0f\u8303\u56f4\u7edf\u8ba1\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"aggs\": {\r\n    \"agg\": {\r\n      \"date_range\": {\r\n        \"field\": \"createDate\",\r\n        \"format\": \"yyyy\", \r\n        \"ranges\": [\r\n          {\r\n            \"to\": 2000\r\n          },\r\n          {\r\n            \"from\": 2000\r\n          }\r\n        ]\r\n      }\r\n    }\r\n  }\r\n}<\/pre>\n<pre># ip\u65b9\u5f0f\u8303\u56f4\u7edf\u8ba1\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"aggs\": {\r\n    \"agg\": {\r\n      \"ip_range\": {\r\n        \"field\": \"ipAddr\",\r\n        \"ranges\": [\r\n          {\r\n            \"to\": \"10.126.2.9\"\r\n          },\r\n          {\r\n            \"from\": \"10.126.2.9\"\r\n          }\r\n        ]\r\n      }\r\n    }\r\n  }\r\n}<\/pre>\n<p>java\u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void RangeQuery() throws Exception{\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa SearchRequest \u5bf9\u8c61\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u4f7f\u7528\u7684\u805a\u5408\u67e5\u8be2\u65b9\u5f0f\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    \/\/ \u65e5\u671f\r\n    \/*request.source(builder.aggregation(\r\n            AggregationBuilders.dateRange(\"agg\").format(\"yyyy\").field(\"createDate\")\r\n                    .addUnboundedTo(2000).addUnboundedFrom(2000)\r\n    ));*\/\r\n    \/\/ \u6570\u503c\r\n    request.source(builder.aggregation(AggregationBuilders.range(\"agg\").field(\"fee\")\r\n            .addUnboundedTo(5).addRange(5,10).addUnboundedFrom(10)));\r\n    \/\/ 3. \u6267\u884c\u67e5\u8be2\r\n    SearchResponse response = client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u83b7\u53d6\u8fd4\u56de\u7ed3\u679c\r\n    Range agg = response.getAggregations().get(\"agg\");\r\n    for (Range.Bucket bucket : agg.getBuckets()) {\r\n        String key = bucket.getKeyAsString();\r\n        long docCount = bucket.getDocCount();\r\n        System.out.println(key+\"\/\"+docCount);\r\n    }\r\n}<\/pre>\n<p><strong>5.9.3 \u7edf\u8ba1\u805a\u5408\u67e5\u8be2<\/strong><\/p>\n<p>\u5b83\u53ef\u4ee5\u5e2e\u4f60\u67e5\u8be2\u6307\u5b9a field \u7684\u6700\u5927\u503c\uff0c\u6700\u5c0f\u503c\uff0c\u5e73\u5747\u503c\uff0c\u5e73\u65b9\u548c<br \/>\n\u4f7f\u7528 extented_stats<\/p>\n<pre># \u7edf\u8ba1\u805a\u5408\u67e5\u8be2\r\nPOST \/sms-logs-index\/sms-logs-type\/_search\r\n{\r\n  \"aggs\": {\r\n    \"agg\": {\r\n      \"extended_stats\": {\r\n        \"field\": \"fee\"\r\n      }\r\n    }\r\n  }\r\n}<\/pre>\n<p>java\u4ee3\u7801\u5b9e\u73b0<\/p>\n<pre>@Test\r\npublic void extendedRangeQuery() throws Exception{\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"sms-logs-index\";\r\n    String type = \"sms-logs-type\";\r\n    \/\/ 1. \u521b\u5efa SearchRequest \u5bf9\u8c61\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u4f7f\u7528\u7684\u805a\u5408\u67e5\u8be2\u65b9\u5f0f\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    builder.aggregation(AggregationBuilders.extendedStats(\"agg\").field(\"fee\"));\r\n    request.source(builder);\r\n    \/\/ 3. \u6267\u884c\u67e5\u8be2\r\n    SearchResponse response = client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u83b7\u53d6\u8fd4\u56de\u7ed3\u679c\r\n    ExtendedStats agg = response.getAggregations().get(\"agg\");\r\n    System.out.println(agg.getMax()+\"\\t\"+agg.getMin()+\"\\t\"+agg.getSum());\r\n}<\/pre>\n<p><strong>5.10 \u5730\u56fe\u7ecf\u7eac\u5ea6\u641c\u7d22<\/strong><\/p>\n<p>ES\u4e2d\u63d0\u4f9b\u4e86\u4e00\u4e2a\u6570\u636e\u7c7b\u578b geo_point\uff0c\u8fd9\u4e2a\u7c7b\u578b\u5c31\u662f\u7528\u6765\u5b58\u50a8\u7ecf\u7eac\u5ea6\u7684<\/p>\n<pre># \u521b\u5efa\u4e2a\u7d22\u5f15\uff0c\u6307\u5b9a\u4e00\u4e2a name\uff0clocation\r\nPUT \/map-maps\r\n{\r\n  \"settings\": {\r\n    \"number_of_replicas\": 1,\r\n    \"number_of_shards\": 5\r\n  },\r\n  \"mappings\": {\r\n    \"map\":{\r\n      \"properties\":{\r\n        \"name\":{\r\n          \"type\":\"text\"\r\n        },\r\n        \"location\":{\r\n          \"type\":\"geo_point\"\r\n        }\r\n      }\r\n    }\r\n  }\r\n}<\/pre>\n<pre># \u6dfb\u52a0\u6d4b\u8bd5\u6570\u636e\r\nPUT \/map-maps\/map\/1\r\n{\r\n  \"name\":\"\u6625\u7199\u8def\u6b65\u884c\u8857\",\r\n  \"location\":{\r\n    \"lon\":104.084227,\r\n    \"lat\":30.661516\r\n  }\r\n}\r\nPUT \/map-maps\/map\/2\r\n{\r\n  \"name\":\"\u6210\u90fd\u56fe\u4e66\u9986\",\r\n  \"location\":{\r\n    \"lon\":104.067196,\r\n    \"lat\":30.658928\r\n  }\r\n}\r\nPUT \/map-maps\/map\/3\r\n{\r\n  \"name\":\"\u5bbd\u7a84\u5df7\u5b50\",\r\n  \"location\":{\r\n    \"lon\":104.059763,\r\n    \"lat\":30.669938\r\n  }\r\n}<\/pre>\n<p><strong>5.10.1 ES\u7684\u5730\u56fe\u68c0\u7d22\u65b9\u5f0f<\/strong><\/p>\n<p>geo_distance \uff1a\u76f4\u7ebf\u8ddd\u79bb\u68c0\u7d22\u65b9\u5f0f<br \/>\ngeo_bounding_box \uff1a\u4ee5\u4e24\u4e2a\u70b9\u786e\u5b9a\u4e00\u4e2a\u77e9\u5f62\uff0c\u83b7\u53d6\u5728\u77e9\u5f62\u5185\u7684\u5168\u90e8\u6570\u636e<br \/>\ngeo_polygon \uff1a\u4ee5\u591a\u4e2a\u70b9\uff0c\u786e\u5b9a\u4e00\u4e2a\u591a\u8fb9\u5f62\uff0c\u83b7\u53d6\u5728\u591a\u8fb9\u5f62\u5185\u7684\u5168\u90e8\u6570\u636e<\/p>\n<p><strong>5.10.2 \u57fa\u4e8eRESTful\u5b9e\u73b0\u5730\u56fe\u68c0\u7d22<\/strong><\/p>\n<pre># geo_distance\r\nPOST \/map-maps\/map\/_search\r\n{\r\n  \"query\": {\r\n    \"geo_distance\":{\r\n      \"location\":{ # \u786e\u5b9a\u4e00\u4e2a\u70b9\r\n        \"lon\":104.073598,\r\n        \"lat\":30.669567\r\n      },\r\n      \"distance\": 3000, # \u786e\u5b9a\u534a\u5f84\r\n      \"distance_type\":\"arc\" #\u6307\u5b9a\u5f62\u72b6\u4e3a\u5706\u5f62\r\n    }\r\n  }\r\n}<\/pre>\n<pre># geo_bounding_box\r\nPOST \/map-maps\/map\/_search\r\n{\r\n  \"query\": {\r\n    \"geo_bounding_box\":{\r\n      \"location\":{\r\n        \"top_left\":{\r\n          \"lon\":104.058147,\r\n          \"lat\":30.670825\r\n        },\r\n        \"bottom_right\":{\r\n          \"lon\":104.061075,\r\n          \"lat\":30.667377\r\n        }\r\n      }\r\n    }\r\n  }\r\n}<\/pre>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/02\/04\/1.png\" alt=\"\" width=\"680\" \/><\/p>\n<pre># geo_polygon\r\nPOST \/map-maps\/map\/_search\r\n{\r\n  \"query\": {\r\n    \"geo_polygon\":{\r\n      \"location\":{\r\n        \"points\":[\r\n          {\r\n            \"lon\":104.058129,\r\n            \"lat\":30.670825\r\n          },{\r\n            \"lon\":104.056458,\r\n            \"lat\":30.668247\r\n          },{\r\n            \"lon\":104.060994,\r\n            \"lat\":30.669443\r\n          }\r\n          ]\r\n      }\r\n    }\r\n  }\r\n}<\/pre>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-2254\" src=\"\/wp-content\/uploads\/2021\/02\/04\/2.png\" alt=\"\" width=\"680\" \/><\/p>\n<p><strong>5.10.3 java\u5b9e\u73b0 geo_polygon<\/strong><\/p>\n<pre>@Test\r\npublic void geoPolygonQuery() throws Exception{\r\n    RestHighLevelClient client = ESClient.getClient();\r\n    String index = \"map-maps\";\r\n    String type = \"map\";\r\n    \/\/ 1. \u521b\u5efa SearchRequest \u5bf9\u8c61\r\n    SearchRequest request=new SearchRequest(index);\r\n    request.types(type);\r\n    \/\/ 2. \u6307\u5b9a\u4f7f\u7528\u7684\u805a\u5408\u67e5\u8be2\u65b9\u5f0f\r\n    SearchSourceBuilder builder=new SearchSourceBuilder();\r\n    List&lt;GeoPoint&gt; list=new ArrayList&lt;&gt;();\r\n    list.add(new GeoPoint(30.670825,104.058129));\r\n    list.add(new GeoPoint(30.668247,104.056458));\r\n    list.add(new GeoPoint(30.669443,104.060994));\r\n    builder.query(QueryBuilders.geoPolygonQuery(\"location\",list));\r\n    request.source(builder);\r\n    \/\/ 3. \u6267\u884c\u67e5\u8be2\r\n    SearchResponse response = client.search(request, RequestOptions.DEFAULT);\r\n    \/\/ 4. \u83b7\u53d6\u8fd4\u56de\u7ed3\u679c\r\n    SearchHit[] hits = response.getHits().getHits();\r\n    for (SearchHit hit : hits) {\r\n        System.out.println(hit.getSourceAsMap());\r\n    }\r\n}<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>2020java\u5fae\u670d\u52a1\u67b6\u6784\u4e94\u4e4bES\u5168\u6587\u641c\u7d22\u5f15\u64ce\u6559\u7a0b \u4e00\u3001ElasticSearch \u4ecb\u7ecd 1.1 \u5f15\u8a00 1.\u5728 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-3022","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/www.9713job.com\/index.php?rest_route=\/wp\/v2\/posts\/3022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.9713job.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.9713job.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.9713job.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.9713job.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3022"}],"version-history":[{"count":24,"href":"https:\/\/www.9713job.com\/index.php?rest_route=\/wp\/v2\/posts\/3022\/revisions"}],"predecessor-version":[{"id":3046,"href":"https:\/\/www.9713job.com\/index.php?rest_route=\/wp\/v2\/posts\/3022\/revisions\/3046"}],"wp:attachment":[{"href":"https:\/\/www.9713job.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.9713job.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.9713job.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}