使用Elasticsearch7.10.2新版本,新手需要注意的那些事
Posted JF Coder
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Elasticsearch7.10.2新版本,新手需要注意的那些事相关的知识,希望对你有一定的参考价值。
使用Elasticsearch,新手需要注意的那些事
全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。简称es, 它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用。
底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elasticsearch 是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。
Elasticsearch是一个实时的分布式开放源代码全文本搜索和分析引擎。可从RESTful Web服务界面访问它,并使用无模式的JSON(javascript对象表示法)文档存储数据。它基于Java编程语言构建,因此Elasticsearch可以在不同平台上运行。它使用户能够以很高的速度浏览大量数据。
一 简单和复杂搜索(Kibana)
-
GET demo/user/_search?q=name:张三 //使用Kibana测试查询
-
GET demo/user/_search "query": //复杂查询,排序,分页,高亮 "match": "name": "张三"
-
GET demo/user/_search "query": "match": "name": "张三" , "_source": ["name","tag"] //结果过滤
-
"sort": [ "age": "order": "asc" //排序 ]
-
"sort": [ "age": "order": "asc" ], "from": 0 , "size": 20 //查询条数
-
GET kuangsheng/user/_search //多条件查询 "query": "bool": "must": [ //"shoud"//相当于or "must_not"相当于not "match": "name": "李四" , "match": "age": "25" ]
-
"filter": //过滤查询 "range": "age": "lt":23 //"gt"大于 "gte"大于等于 "lte"小于等于
-
精确查询
-
term 直接查询(精确),是代表完全匹配
-
match 使用分词器(先分析文档,然后在进行查询)
"query":
"term" :
"price" : 100
通常当查找一个精确值的时候,我们不希望对查询进行评分计算。只希望对文档进行包括或排除的计算,所以我们会使用 constant_score 查询以非评分模式来执行 term 查询并以一作为统一评分。最终组合的结果是一个 constant_score 查询,它包含一个 term 查询:
GET /demo/users/_search
"query":
"constant_score": //我们用constant_score将term查询转化为过滤器
"filter":
"term" : //我们之前看到过的term查询
"price" : 100
最简单的一个match例子:
查询和"张三"这个查询语句匹配的文档。
"query":
"match":
"content" :
"query" : "张三"
注意 text keyword类型不会被分词器解析
- 高亮查询
GET kuangsheng/user/_search
"query":
"match":
"name": "张三"
,
"highlight": //自定义样式 如:"pre_tags":"<p>" "post_tags":"</p>"
"fields":
"name": //name类型高亮
设置高亮后的elasticsearch返回值
"took" : 43,
"timed_out" : false,
"_shards" :
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
,
"hits" :
"total" :
"value" : 1,
"relation" : "eq"
,
"max_score" : 2.5226097,
"hits" : [
"_index" : "kuangsheng",
"_type" : "user",
"_id" : "2",
"_score" : 2.5226097,
"_source" :
"name" : "张三",
"age" : "25",
"desc" : "gggg",
"tag" : "渣男"
,
"highlight" :
"name" : [
"<em>张</em><em>三</em>" //高亮默认标签
]
]
二 SpringBoot集成Elasticsearch
- 导入
<dependency>
<groupId>org.elasticsearch.client </groupId>
<artifactId >elasticsearch-rest-high-level-client</artifactId>
<version>7.12.0</version>
</dependency>
官方文档:https://www.elastic.co/guide/en/elasticsearch/client/
- 配置连接客户端的地址
@Configuration
public class ElasticSearchClintConfig
@Bean
public RestHighLevelClient restHighLevelClient()
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", 9200, "http")));
return client;
- 测试
@Autowired
@Qualifier("restHighLevelClient")
private RestHighLevelClient client;
@Test //测试索引创建
void testCreateIndex() throws IOException
CreateIndexRequest request = new CreateIndexRequest("kuang_index");
CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
System.out.println(createIndexResponse);
- 添加文档
@Test
void into() throws IOException
//创建对象
User user = new User("张三", 33);
//创建请求
IndexRequest request = new IndexRequest("kuang_index");
//设置规则
request.id("1").timeout("1s");
//将数据放入请求
request.source(JSON.toJSONString(user), XContentType.JSON);
//发送请求,获取响应结果
IndexResponse index = client.index(request, RequestOptions.DEFAULT);
System.out.println(index.toString());
- 获取文档
@Test
void getDocument() throws IOException
GetRequest request = new GetRequest("kuang_index", "1");
GetResponse response = client.get(request, RequestOptions.DEFAULT);
System.out.println(response.getSourceAsString());
System.out.println(response);
- elasticsearch jar包中对update,get,search,delete等都封装了一系列方法
推荐狂神说的Elasticsearch教程:www.kuangstudy.com
以上是关于使用Elasticsearch7.10.2新版本,新手需要注意的那些事的主要内容,如果未能解决你的问题,请参考以下文章