Elasticsearch-RestClient基础
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch-RestClient基础相关的知识,希望对你有一定的参考价值。
参考技术Atips: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基础的主要内容,如果未能解决你的问题,请参考以下文章