Elasticsearch-RestClient基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch-RestClient基础相关的知识,希望对你有一定的参考价值。

参考技术A

tips:Ctrl + F快速定位所需内容阅读吧。

Java REST Client (deprecated) | Elastic
Overview (rest-high-level 7.12.1 API) (elastic.co)

ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。

RestClient是提供给Java的客户端。

1、基础准备

创建数据表 tb_hotel ,如下:

插入数据,如下:

elasticsearch相关依赖,如下:

因为SpringBoot默认的ES版本是7.6.2,所以我们需要覆盖默认的ES版本:

其他依赖,如下:

Ⅰ 配置服务端口;
Ⅱ 配置数据源;
Ⅲ 配置日志;
Ⅳ 配置mybatis-plus。

Hotel类

HotelDoc类

geo_point类型属性映射的形式有多种,官方文档见此: Geopoint field type
,常见的形式如下图。此处我们采用第2种形式,做属性映射 "location": "41.12,-71.34" ,所以在类型转换的时候手动拼接了属性值 this.location = hotel.getLatitude() + ", " + hotel.getLongitude(); 。

2、RestClient操作索引库

Ⅰ 编写创建索引库语句:这个步骤可以在自己 Dev Tools 控制台内完成,然后将字段复制到IDEA。

@BeforeEach 内完成client对象的初始化配置, @AfterEach 内完成操作后的资源释放。

不难看出对索引库的操作有一定的相似性:
Ⅰ XXXIndexRequest:Create、Delete、Get的请求request对象;
Ⅱ client.indices().XXX():create、delete、get方法。

3、RestClient操作文档

添加@SpringBootTest注解,注入hotelService:

不难看出对索引文档的操作也具有一定的相似性:
Ⅰ XXXRequest:Index、Get、Update、Delete、Bulk的请求request对象;
Ⅱ client.XXX()方法:index、get、update、delete、bulk方法。

以上即为RestClient基础的全部内容,感谢阅读。

基指针中的派生对象如何调用基函数?

【中文标题】基指针中的派生对象如何调用基函数?【英文标题】:How derived object in base pointer invokes base function? 【发布时间】:2011-07-21 04:46:54 【问题描述】:

持有派生对象的基指针如何仍然指向基函数? 在此之后

a_ptr = &b_obj; 
a_ptr->disp();

如果基函数是虚拟的,我理解 V-table 的参与,它保存基函数的地址。但是在这里,存放派生对象的基指针可以设法调用基函数。

谁能解释一下幕后发生的事情?

class A

 public:
 //virtual void disp()
 void disp()
  cout<< "From class A\n" << endl; 
;

class B : public A

public:
 void disp()
  cout << "From Class B\n" <<endl; 
;

int main()

 A a_obj;
 A *a_ptr;

 B b_obj;

 a_ptr = &a_obj;
 a_ptr->disp();

 a_ptr = &b_obj;
 a_ptr->disp();

【问题讨论】:

【参考方案1】:

基础指针总是指向派生对象的基础部分。它不知道有关派生对象成员/方法的任何信息。

如果将方法A::disp() 声明为virtual,那么只有它会在运行时被解析。它可以根据a_ptr指向的对象调用A::disp()B::disp()

简单来说,

    如果你声明了一个方法virtual 那么编译器就知道这个 方法必须在运行时进行评估。此外,必须使用指针或引用调用该方法。 如果方法是使用对象调用的,或者方法不是 virtual 然后编译器立即将调用调用 调用者的静态类型。

在您的情况下,调用者的静态类型是A*,而方法不是virtual。因此编译器立即调用A::disp();它不等待运行时评估。

a_ptr = &b_obj;  // static type --> typeof(*a_ptr) --> A
                 // dynamic type --> typeof(b_obj) --> B
a_ptr->disp();   // (is A::disp() virtual)?
                 // chooses B::disp() at runtime : chooses A::disp() at compiletime;

[注意:假设您只将B::disp() 设为virtual 并保持A::disp() 正常方法不变,那么您仍然会得到与现在相同的结果。]

【讨论】:

以上是关于Elasticsearch-RestClient基础的主要内容,如果未能解决你的问题,请参考以下文章

基指针中的派生对象如何调用基函数?

线性基入门

线性基讲解

肖特基二极管的作用与识别方法

线性基学习

线性基总结