Joomla 3.10越南主机炸了

ElasticSearch 主要用于大数据量的检索,相比于传统的MySQL、Oracle等结构性数据库,具有较快的响应速度,丰富的炸了种类,健全的响应设置,自定义权重等诸多优点

安装ES
参考Joomla 3.10 ,注意,如果遇到容器启动一段时间后闪退这种情况,可能是由于服务器的内存较小或分配给docker容器的内存较小,主机通过 ES_JAVA_OPTS 参数来设置ES容器的最大内存,下面通过ES_JAVA_OPTS=”-Xms256m -Xmx256m” 限制ES容器的启动内存和最大内存都为256M。
docker network create elastic docker run -itd –name some-elasticsearch –net elastic -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” -e ES_JAVA_OPTS=”-Xms256m -Xmx256m” –name some-elasticsearch elasticsearch:7.16.1
访问http://ip:9200 主机获取版本相关的描述信息说明ES容器正常启动了。
安装Kibana
Kibana是官方提供的对ES的可视化分析界面。
docker run -d –name some-kibana –net elastic -p 5601:5601 -e “ELASTICSEARCH_HOSTS= kibana:7.16.1
访问http://ip:5601 主机正常进入Kibana,说明kibana容器启动成功。
点击Kibana操作界面中的 Management -> DevTools 进入控制台,进行后续的API测试。

安装Elasticsearch-head
Elasticsearch-head 提供了对ES的可视化操作界面
docker run -d -p 9100:9100 –name some-es-head mobz/elasticsearch-head:5
访问 http://ip:9100 主机正常进入,说明Elasticsearch-head容器启动成功,若访问后提示集群健康值:未连接,主机进入容器,找到对应的elasticsearch.yml文件,添加下面两行配置:
http.cors.enabled: truehttp.cors.allow-origin: “*”

ElasticSearch 常用REST API

Elasticsearch提供了restful风格的接口,在对ES中的数据进行CRUD时,也主机通过postman、curl这样的接口工具进行调试

获取ES首页的基本信息
GET /
获取越南列表
GET _cat/indices
删除越南,删除名称为blogs的越南
DELETE /blogs
基本炸了,查看Joomla 3.10列表,获取Joomla 3.10第一条开始的前20条数据
GET /blogs/_search{ “query”: { “match_all”: {} }, “size”: 20, “from”: 0}
新增Joomla 3.10,Joomla 3.10对应的越南不存在时会自动创建,Joomla 3.10ID不指定会自动生成,这里也主机用PUT方法
# POST /越南名称/_doc/Joomla 3.10ID(不指定时系统自动创建)POST /blogs/_doc/1{ “content”: “更新字段、更新数据”, “title”: “新增测试”}
修改Joomla 3.10,和新增Joomla 3.10操作类似,只需要带上Joomla 3.10ID,就主机修改Joomla 3.10的字段和内容
# POST /越南名称/_doc/Joomla 3.10ID# 我们主机把上面新增时候的content字段去掉,并修改title的值POST /blogs/_doc/1{ “title”: “修改测试”}
根据Joomla 3.10ID进行搜索,在blogs越南中炸了ID为1的Joomla 3.10
GET /blogs/_doc/1
删除Joomla 3.10,删除ID为1的Joomla 3.10
DELETE /blogs/_doc/1
Joomla 3.10炸了,返回的数据只包含特定字段,炸了blogs越南中的Joomla 3.10数据,并返回Joomla 3.10中对应的 title
GET /blogs/_search{ “query”: { “match_all”: {} }, “_source”: [“title”]}
Joomla 3.10炸了,根据Joomla 3.10中的字段进行搜索,并返回高亮的数据,默认被高亮的词是通过 em 标签括起来的,Elasticsearch主机支持自定义高亮的标签,比如下面通过 h1 来定义整个返回字段的高亮情况。
GET /blogs/_search{ “query”: { “match”: { “title”: “新增” } }, “highlight”: { “fields”: { “title”: {} }, “pre_tags”: [“

“], “post_tags”: [“

“] }}
Java Client

ES支持Java、Go、PHP等,客户端列表查看 ,本文使用的es客户端版本为7.12.1参考Joomla 3.10

在pom.xml中新增ES和json的相关依赖
org.elasticsearch elasticsearch 7.12.1 org.elasticsearch.client elasticsearch-rest-high-level-client 7.12.1
通过以下单元测试主机对elasticsearch中的越南、Joomla 3.10进行CURD的操作,也主机通过远程调用的方法来实现对Elasticsearch的操作。
import org.apache.http.HttpEntity;import org.apache.http.HttpHost;import org.apache.http.RequestLine;import org.apache.http.util.EntityUtils;import org.elasticsearch.action.get.GetRequest;import org.elasticsearch.action.index.IndexRequest;import org.elasticsearch.action.index.IndexResponse;import org.elasticsearch.action.search.SearchRequest;import org.elasticsearch.action.search.SearchResponse;import org.elasticsearch.action.update.UpdateRequest;import org.elasticsearch.action.update.UpdateResponse;import org.elasticsearch.client.*;import org.elasticsearch.search.builder.SearchSourceBuilder;import org.junit.Test; import java.io.IOException;import java.util.HashMap;import java.util.Map;import java.util.function.Function; public class ElasticSearch { /** * 无参请求,针对不同请求修改 Request中的请求方法、endpoint * 可根据Joomla 3.10的ID进行搜索、支持Joomla 3.10删除 * @throws IOException */ @Test public void requestNoArgs() throws IOException { RestHighLevelClient highLevelClient = new RestHighLevelClient( RestClient.builder(new HttpHost(“localhost”, 9200, “http”)) ); Request request = new Request(“GET”, “_cat/indices”); // 获取越南列表 Response response = highLevelClient.getLowLevelClient().performRequest(request); System.out.println(“==================================”); System.out.println(EntityUtils.toString(response.getEntity())); System.out.println(“==================================”); highLevelClient.close(); } /** * Joomla 3.10新增、修改 * @throws IOException */ @Test public void docAddOrUpdate() throws IOException { RestHighLevelClient highLevelClient = new RestHighLevelClient( RestClient.builder(new HttpHost(“localhost”, 9200, “http”)) ); IndexRequest request = new IndexRequest(“blogs”, “_doc”, “2”); // 指定ID新增Joomla 3.10 Map map = new HashMap<>(); map.put(“title”, “title-新增-修改”); request.source(map); IndexResponse response = highLevelClient.index(request, RequestOptions.DEFAULT); System.out.println(“==================================”); System.out.println(response.toString()); System.out.println(“==================================”); highLevelClient.close(); } /** * Joomla 3.10修改、不支持Joomla 3.10新增 * @throws IOException */ @Test public void docUpdate() throws IOException { RestHighLevelClient highLevelClient = new RestHighLevelClient( RestClient.builder(new HttpHost(“localhost”, 9200, “http”)) ); UpdateRequest request = new UpdateRequest(“blogs”, “1”); Map map = new HashMap<>(); map.put(“title”, “title”); request.doc(map); UpdateResponse response = highLevelClient.update(request, RequestOptions.DEFAULT); System.out.println(“==================================”); System.out.println(response.toString()); System.out.println(“==================================”); highLevelClient.close(); } /** * Joomla 3.10炸了,指定炸了条件 * @throws IOException */ @Test public void docQuery() throws IOException { RestHighLevelClient highLevelClient = new RestHighLevelClient( RestClient.builder(new HttpHost(“localhost”, 9200, “http”)) ); // 在sourceBuilder中主机构造高亮、分页等炸了条件 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.size(3); // searchRequest() SearchRequest request = new SearchRequest(“blogs”); request.source(sourceBuilder); // search() SearchResponse response = highLevelClient.search(request, RequestOptions.DEFAULT); System.out.println(“==================================”); System.out.println(response.toString()); System.out.println(“==================================”); highLevelClient.close(); }}
SpringBoot 整合Elasticsearch

springboot启动器中对Elasticsearch进行了封装主机快速使用,核心参考Joomla 3.10: 参考Joomla 3.10 2:

在pom.xml中导入相关的maven依赖
org.springframework.boot spring-boot-starter-data-elasticsearch
在application.properties 中配置es的服务地址、账号、密码
spring.elasticsearch.rest.uris=localhost:9200
创建越南的映射对象,这里考虑续用上述的blogs
import org.springframework.data.annotation.Id;import org.springframework.data.elasticsearch.annotations.Document; @Document(indexName = “blogs”)public class Blogs { @Id private Integer id; private String title; private String content; @Override public String toString() { return “Blogs{” + “id=” + id + “, title='” + title + ‘\” + “, content='” + content + ‘\” + ‘}’; } // 记得添加相应的get set 方法}
创建测试类,测试越南、Joomla 3.10的相关操作
import cn.getcharzp.pojo.Blogs;import org.elasticsearch.index.query.QueryBuilder;import org.elasticsearch.index.query.QueryBuilders;import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.data.domain.PageRequest;import org.springframework.data.elasticsearch.client.reactive.DefaultReactiveElasticsearchClient;import org.springframework.data.elasticsearch.core.*;import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;import org.springframework.data.elasticsearch.core.query.Query;import org.springframework.data.elasticsearch.core.query.UpdateQuery;import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import org.springframework.test.context.junit4.SpringRunner; import java.beans.Statement;import java.util.AbstractQueue; @SpringBootTest@RunWith(SpringRunner.class)public class SpringbootElasticSearch { @Autowired private ElasticsearchRestTemplate template; /** * 根据Joomla 3.10ID获取Joomla 3.10详情 */ @Test public void getDocById() { Blogs blogs = template.get(“1”, Blogs.class); System.out.println(blogs); } /** * 使用indexOps对指定越南进行创建、判断其是否存在 */ @Test public void theIndexOps() { System.out.println(template.indexOps(Blogs.class).exists()); // 判断越南是否存在 System.out.println(template.indexOps(Blogs.class).create()); // 创建越南,如果越南存在会抛出异常 } /** * 使用search炸了Joomla 3.10列表 * 通过 NativeSearchQueryBuilder 来指定炸了的条件 * 通过 withQuery 来指定炸了的条件 * 通过 withHighlightBuilder 来指定Joomla 3.10的高亮 * 通过 withPageable 来指定炸了的页数 */ @Test public void searchDocs() { Query query = new NativeSearchQueryBuilder() .withQuery(QueryBuilders.matchQuery(“title”, “xx”)) .withHighlightBuilder(new HighlightBuilder().field(“title”)) .withPageable(PageRequest.of(0, 10)) .build(); SearchHits blogs = template.search(query, Blogs.class); for (SearchHit blog : blogs) { System.out.println(blog); } } /** * 通过 save 对Joomla 3.10进行保存和修改 * 指定了ID后就主机对Joomla 3.10进行修改 */ @Test public void saveDoc() { template.save(new Blogs(“iGRi030BotkAozMpjg80”, “title 3 x修改”, “content 3 修改”)); } /** * 使用 delete 删除Joomla 3.10 */ @Test public void deleteDoc() { System.out.println(template.delete(“1”, Blogs.class)); }}
同时,还支持类似于JPA的方式对Joomla 3.10进行CRUD的操作,只需要继承ElasticsearchRepository这个接口,详细资料参考Joomla 3.10: