使用Elasticsearch,新手需要注意的那些事
全文搜索屬于最常見的需求,開源的 Elasticsearch (以下簡稱 Elastic)是目前全文搜索引擎的首選,簡稱es, 它可以快速地儲存、搜索和分析海量資料,維基百科、Stack Overflow、Github 都采用,

Elastic 的底層是開源庫 Lucene,但是,你沒法直接用 Lucene,必須自己寫代碼去呼叫它的介面,Elastic 是 Lucene 的封裝,提供了 REST API 的操作介面,開箱即用,
一 簡單和復雜搜索(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 使用分詞器(先分析檔案,然后在進行查詢)
注意 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());
}
- elasticsearch jar包中對update,get,search,delete等都封裝了一系列方法

推薦狂神說的Elasticsearch教程:www.kuangstudy.com
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260381.html
標籤:其他
上一篇:從rocketmq到kafka:集群、一致性與重平衡
下一篇:藍橋杯 演算法提高 高精度乘法
