java代码操作es,要用到RestClient
RestClient是什么?
实际上他就是我们es官方提供的各种不同的语言的客户端(java,c++等)
用来操作es 这些客户端的本质就是组装DSL语句 通过http请求发送给
es,也就是我们不用手写DSL语句客户端帮我写我只发请求就好了

客户端:
image.png
image.png
image.png

分析数据:
mapping要考虑的问题:
字段名,数据模型,是否参与搜素,是否是分词,如果是分词,分词器是什么?

image.png

编写mapping映射:
image.png

  1. PUT /hotel
  2. {
  3. "mappings": {
  4. "properties": {
  5. "id":{
  6. "type": "keyword"
  7. },
  8. "name":{
  9. "type": "text",
  10. "analyzer": "ik_max_word",
  11. "copy_to": "all"
  12. },
  13. "address":{
  14. "type": "keyword",
  15. "index": false
  16. },
  17. "price":{
  18. "type": "integer"
  19. },
  20. "score":{
  21. "type": "integer"
  22. },
  23. "brand":{
  24. "type": "keyword",
  25. "copy_to": "all"
  26. },
  27. "city":{
  28. "type": "keyword"
  29. },
  30. "starName":{
  31. "type": "keyword"
  32. },
  33. "business":{
  34. "type": "keyword",
  35. "copy_to": "all"
  36. },
  37. "location":{
  38. "type": "geo_point"
  39. },
  40. "pic":{
  41. "type": "keyword",
  42. "index": false
  43. },
  44. "all":{
  45. "type": "text",
  46. "analyzer": "ik_max_word"
  47. }
  48. }
  49. }
  50. }

想根据多个字段去搜索:
image.png

RestClient操作索引库—-初始化RestClient:

  • 引入es的RestClinentHighleveClient依赖
  • 因为SpringBoot默认版本是7.6.2所以我们需要覆盖默认es版本
  • 初始化RestHighLevelClient

image.png

  1. <dependency>
  2. <groupId>org.elasticsearch.client</groupId>
  3. <artifactId>elasticsearch-rest-high-level-client</artifactId>
  4. </dependency>
  1. <properties>
  2. <java.version>1.8</java.version>
  3. <elasticsearch.version>7.12.1</elasticsearch.version>
  4. </properties>
  1. @Test
  2. void testIndex(){
  3. System.out.println(client);
  4. }
  5. @BeforeEach
  6. void setUp() {
  7. //创建客户端
  8. client = new RestHighLevelClient(RestClient.builder(
  9. HttpHost.create("http://192.168.150.101:9200")
  10. ));
  11. }
  12. @AfterEach
  13. void tearDown() throws IOException {
  14. //销毁客户端
  15. client.close();
  16. }

image.png

RestClient:操作索引库—-创建索引库:

image.png

image.png

  1. @Test
  2. void createHotelIndex() throws IOException {
  3. //创建Request对象 索引库的名称
  4. CreateIndexRequest request = new CreateIndexRequest("hotel");
  5. //准备请求的参数DSL语句 传递其实就是DSL json风格的语句
  6. request.source(MAPPING_TEMPLATE,XContentType.JSON);
  7. //发送请求包含了索引库里面的所有的操作方法 走默认
  8. client.indices().create(request,RequestOptions.DEFAULT);
  9. }

删除和判断索引库是否存在

image.png
image.png

  1. /**
  2. * 删除索引库
  3. */
  4. @Test
  5. void testDeletIndex() throws IOException {
  6. //创建请求对象
  7. DeleteIndexRequest request = new DeleteIndexRequest("hotel");
  8. //发送请求
  9. client.indices().delete(request,RequestOptions.DEFAULT);
  10. }
  1. /**
  2. * 判断索引库是否存在
  3. * @throws IOException
  4. */
  5. @Test
  6. void testExisHotleIndex() throws IOException {
  7. //创建请求对象
  8. GetIndexRequest request = new GetIndexRequest("hotel");
  9. //发送请求:
  10. final boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
  11. System.out.println(exists ? "存在":"不存在");
  12. }

总结:
初始化:
RestHighLevelClient
new 出它指定IP地址和端口号
创建Requet对象根据你直接的业务需求来决定(增删查,判断是否存在)都会有自己独立的Requets对象

准备DSL(只要创建的时候才会需要参数)

发送请求 调用 RestHighLevelClient #indices().xxx()方法
xxx:create exists delete

  1. import static cn.itcast.hotel.constants.HotelIndexConstants.MAPPING_TEMPLATE;
  2. @SpringBootTest
  3. class HotelIndexTest {
  4. private RestHighLevelClient client;
  5. @Test
  6. void testCreateIndex() throws IOException {
  7. // 1.准备Request PUT /hotel
  8. CreateIndexRequest request = new CreateIndexRequest("hotel");
  9. // 2.准备请求参数
  10. request.source(MAPPING_TEMPLATE, XContentType.JSON);
  11. // 3.发送请求
  12. client.indices().create(request, RequestOptions.DEFAULT);
  13. }
  14. /**
  15. * 判断索引库是否存在
  16. * @throws IOException
  17. */
  18. @Test
  19. void testExisHotleIndex() throws IOException {
  20. //创建请求对象
  21. GetIndexRequest request = new GetIndexRequest("hotel");
  22. //发送请求:
  23. final boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
  24. System.out.println(exists ? "存在":"不存在");
  25. }
  26. /**
  27. * 删除索引库
  28. */
  29. @Test
  30. void testDeletIndex() throws IOException {
  31. //创建请求对象
  32. DeleteIndexRequest request = new DeleteIndexRequest("hotel");
  33. //发送请求
  34. client.indices().delete(request,RequestOptions.DEFAULT);
  35. }
  36. @Test
  37. void testIndex(){
  38. System.out.println(client);
  39. }
  40. @BeforeEach
  41. void setUp() {
  42. //创建客户端
  43. client = new RestHighLevelClient(RestClient.builder(
  44. HttpHost.create("http://114.55.210.174:9200")
  45. ));
  46. }
  47. @AfterEach
  48. void tearDown() throws IOException {
  49. //销毁客户端
  50. client.close();
  51. }
  52. }