Elasticsearch7.x&Kibana7.x部署

r囧r小猫 2022-10-24 01:36 302阅读 0赞
  • Docker:https://blog.csdn.net/qq_40794973/category_9639934.html
  • ES中的filtered&filter:https://yuanyu.blog.csdn.net/article/details/112639371

  • http://https//hub.docker.com/_/elasticsearch?tab=tags&page=1&ordering=last_updated

  • https://www.elastic.co/guide/en/elasticsearch/reference/7.5/docker.html
  • https://hub.docker.com/_/kibana?tab=tags&page=1&ordering=last_updated
  • https://www.elastic.co/guide/en/kibana/current/docker.html

  • https://www.elastic.co/guide/cn/elasticsearch/guide/current/_who_should_read_this_book.html

  • https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.x/java-rest-high-search.html

1 部署elasticsearch

1、创建elasticsearch数据存储目录

  1. rm -rf /mydata/elasticsearch
  2. mkdir -p /mydata/elasticsearch/config /mydata/elasticsearch/data /mydata/elasticsearch/plugins/ik
  3. echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
  4. ### 保证权限(有目录映射可能会出现非root用户没用访问权限)
  5. chmod -R 777 /mydata/elasticsearch/

2、下载IK安装分词器

  1. ### 下载
  2. wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
  3. ### 解压
  4. unzip elasticsearch-analysis-ik-7.4.2.zip -d /mydata/elasticsearch/plugins/ik/
  5. ### 删除zip文件
  6. rm -rf elasticsearch-analysis-ik-7.4.2.zip

3、启动elasticsearch

  1. docker run \
  2. --name es742 \
  3. -p 9200:9200 \
  4. -p 9300:9300 \
  5. -e "discovery.type=single-node" \
  6. -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
  7. -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
  8. -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
  9. -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
  10. -d elasticsearch:7.4.2

4、查看es是否启动

  1. [root@localhost ~]# curl http://127.0.0.1:9200/
  2. {
  3. "name" : "db03fad7d132",
  4. "cluster_name" : "elasticsearch",
  5. "cluster_uuid" : "5SfOiSX-SJmxIFAuuv9Rwg",
  6. "version" : {
  7. "number" : "7.4.2",
  8. "build_flavor" : "default",
  9. "build_type" : "docker",
  10. "build_hash" : "2f90bbf7b93631e52bafb59b3b049cb44ec25e96",
  11. "build_date" : "2019-10-28T20:40:44.881551Z",
  12. "build_snapshot" : false,
  13. "lucene_version" : "8.2.0",
  14. "minimum_wire_compatibility_version" : "6.8.0",
  15. "minimum_index_compatibility_version" : "6.0.0-beta1"
  16. },
  17. "tagline" : "You Know, for Search"
  18. }

2 部署kibana

  1. docker run \
  2. --name kb742 \
  3. -p 5601:5601 \
  4. -e ELASTICSEARCH_HOSTS=http://10.4.42.21:9200 \
  5. -e "I18N_LOCALE=zh-CN" \
  6. -d kibana:7.4.2
  7. ### kibana上测试分词器
  8. POST _analyze
  9. {
  10. "analyzer": "ik_smart",
  11. "text": "我是中国人"
  12. }

3 访问

elasticsearch:http://10.4.42.21:9200/,kiban:http://10.4.42.21:5601/app/kibana


4 测试

1、插入数据

  1. ### 创建book索引
  2. PUT /book/
  3. {
  4. "settings": {
  5. "number_of_shards": 1,
  6. "number_of_replicas": 0
  7. },
  8. "mappings": {
  9. "properties": {
  10. "name":{
  11. "type": "text",
  12. "analyzer": "ik_max_word",
  13. "search_analyzer": "ik_smart"
  14. },
  15. "description":{
  16. "type": "text",
  17. "analyzer": "ik_max_word",
  18. "search_analyzer": "ik_smart"
  19. },
  20. "studymodel":{
  21. "type": "keyword"
  22. },
  23. "price":{
  24. "type": "double"
  25. },
  26. "timestamp": {
  27. "type": "date",
  28. "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
  29. },
  30. "pic":{
  31. "type":"text",
  32. "index":false
  33. }
  34. }
  35. }
  36. }
  37. ### 插入数据
  38. PUT /book/_doc/1
  39. {
  40. "name": "Bootstrap开发",
  41. "description": "Bootstrap是由Twitter推出的一个前台页面开发css框架,是一个非常流行的开发框架,此框架集成了多种页面效果。此开发框架包含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长css页面开发的程序人员)轻松的实现一个css,不受浏览器限制的精美界面css效果。",
  42. "studymodel": "201002",
  43. "price":38.6,
  44. "timestamp":"2019-08-25 19:11:35",
  45. "pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
  46. "tags": [ "bootstrap", "dev"]
  47. }
  48. PUT /book/_doc/2
  49. {
  50. "name": "java编程思想",
  51. "description": "java语言是世界第一编程语言,在软件开发领域使用人数最多。",
  52. "studymodel": "201001",
  53. "price":68.6,
  54. "timestamp":"2019-08-25 19:11:35",
  55. "pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
  56. "tags": [ "java", "dev"]
  57. }
  58. PUT /book/_doc/3
  59. {
  60. "name": "spring开发基础",
  61. "description": "spring 在java领域非常流行,java程序员都在用。",
  62. "studymodel": "201001",
  63. "price":88.6,
  64. "timestamp":"2019-08-24 19:11:35",
  65. "pic":"group1/M00/00/00/wKhlQFs6RCeAY0pHAAJx5ZjNDEM428.jpg",
  66. "tags": [ "spring", "java"]
  67. }

2、curl查询

  1. curl -XPOST http://10.4.42.21:9200/book/_search -H 'Content-Type: application/json' -d'
  2. {
  3. "query": {
  4. "match": {
  5. "studymodel": "201001"
  6. }
  7. }
  8. }'

3、springboot

  1. <properties>
  2. <java.version>8</java.version>
  3. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  4. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  5. <spring-boot.version>2.2.0.RELEASE</spring-boot.version>
  6. <es.version>7.3.0</es.version>
  7. </properties>
  8. <dependencyManagement>
  9. <dependencies>
  10. <dependency>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-dependencies</artifactId>
  13. <version>${spring-boot.version}</version>
  14. <type>pom</type>
  15. <scope>import</scope>
  16. </dependency>
  17. </dependencies>
  18. </dependencyManagement>
  19. <dependencies>
  20. <!-- boot -->
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-starter-web</artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.springframework.boot</groupId>
  27. <artifactId>spring-boot-starter-test</artifactId>
  28. <scope>test</scope>
  29. </dependency>
  30. <!-- es客户端 -->
  31. <!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client -->
  32. <dependency>
  33. <groupId>org.elasticsearch.client</groupId>
  34. <artifactId>elasticsearch-rest-high-level-client</artifactId>
  35. <version>${es.version}</version>
  36. <exclusions>
  37. <exclusion>
  38. <groupId>org.elasticsearch</groupId>
  39. <artifactId>elasticsearch</artifactId>
  40. </exclusion>
  41. <exclusion>
  42. <groupId>org.elasticsearch.client</groupId>
  43. <artifactId>elasticsearch-rest-client</artifactId>
  44. </exclusion>
  45. </exclusions>
  46. </dependency>
  47. <!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
  48. <dependency>
  49. <groupId>org.elasticsearch</groupId>
  50. <artifactId>elasticsearch</artifactId>
  51. <version>${es.version}</version>
  52. </dependency>
  53. <!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-client -->
  54. <dependency>
  55. <groupId>org.elasticsearch.client</groupId>
  56. <artifactId>elasticsearch-rest-client</artifactId>
  57. <version>${es.version}</version>
  58. </dependency>
  59. <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
  60. <dependency>
  61. <groupId>org.projectlombok</groupId>
  62. <artifactId>lombok</artifactId>
  63. <version>1.18.16</version>
  64. <scope>provided</scope>
  65. </dependency>
  66. </dependencies>
  67. /**
  68. * https://www.jb51.net/article/197673.htm
  69. */
  70. @Slf4j
  71. public class TestSearchJsonOutput {
  72. private RestHighLevelClient restHighLevelClient;
  73. @Before
  74. public void init() {
  75. restHighLevelClient = new RestHighLevelClient(RestClient.builder(new HttpHost(ES_HOST, ES_PORT, "http")));
  76. }
  77. private static final com.fasterxml.jackson.databind.ObjectMapper objectMapper = new com.fasterxml.jackson.databind.ObjectMapper();
  78. private static final String ES_INDEX = "book";
  79. private static final String ES_HOST = "10.4.42.21";
  80. private static final Integer ES_PORT = 9200;
  81. @Test
  82. public void test_search() throws IOException {
  83. //1、构建搜索请求
  84. SearchRequest searchRequest = new SearchRequest(ES_INDEX);
  85. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  86. BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
  87. boolQueryBuilder.must(QueryBuilders.termQuery("studymodel", "201001"));
  88. boolQueryBuilder.should(QueryBuilders.rangeQuery("price").lte("90"));
  89. boolQueryBuilder.mustNot(QueryBuilders.matchQuery("description", "spring"));
  90. String[] includes = {"name", "description", "price"};
  91. searchSourceBuilder.fetchSource(includes, new String[]{});
  92. //第几页
  93. int page = 1;
  94. //每页几个
  95. int size = 4;
  96. //下标计算
  97. int from = (page - 1) * size;
  98. searchSourceBuilder.from(from);
  99. searchSourceBuilder.size(size);
  100. searchSourceBuilder.query(boolQueryBuilder);
  101. searchRequest.source(searchSourceBuilder);
  102. //2、执行搜索
  103. SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
  104. logCurlString(searchSourceBuilder);
  105. //3、获取结果
  106. SearchHits hits = searchResponse.getHits();
  107. //数据数据
  108. SearchHit[] searchHits = hits.getHits();
  109. //for (SearchHit searchHit : searchHits) {
  110. // Map<String, Object> source = searchHit.getSourceAsMap();
  111. // System.out.println("res => \n" + JSON.toJSONString(source, true));
  112. //}
  113. }
  114. /**
  115. * 打印出es curl命令
  116. *
  117. * @param searchSourceBuilder
  118. */
  119. private void logCurlString(SearchSourceBuilder searchSourceBuilder) {
  120. String body = getPrettyFormat(searchSourceBuilder.toString());
  121. String pattern = "\ncurl -XPOST -H 'Content-Type: application/json' http://{}:{}/{}/_search?pretty -d'\n{}'";
  122. log.info(pattern, ES_HOST, ES_PORT, ES_INDEX, body);
  123. }
  124. /**
  125. * 格式化输出JSON字符串
  126. *
  127. * @return 格式化后的JSON字符串
  128. */
  129. private static String getPrettyFormat(String json) {
  130. String ret = "";
  131. try {
  132. Object obj = objectMapper.readValue(json, Object.class);
  133. ret = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
  134. } catch (JsonProcessingException ignored) {
  135. }
  136. return ret;
  137. }
  138. }

发表评论

表情:
评论列表 (有 0 条评论,302人围观)

还没有评论,来说两句吧...

相关阅读