ElasticSearch入门

ElasticSearch入门_第1张图片

初步检索

```shell GET /_cat/nodes // 查看所有结点

GET /_cat/master // 查看主节点

GET /_cat/indices // 查看所有索引

GET /bank/_search // 查找bank下所有数据 ```

添加或更新文档

shell POST /customer/external { "name": "哈哈哈" }

删除索引或文档

shell DELETE customer/external/1 DELETE customer

Query DSL

match_all:查找所有类型

javascript GET /bank/_search { "query": { "match_all": {} }, "from":0, // 从第几条记录开始 "size": 3, // 查出来多少条 "_source": ["firstname","address"] // 筛选某些字段 }

match:会对检索条件进行分词匹配,并按照评分进行排序

java GET /bank/_search { "query": { "match": { "address": "kings mill" // 忽略大小写 } } }

FILED.keyword:address的值必须等于789 Madison Street

java GET bank/_search { "query": { "match": { "address.keyword": "789 Madison Street" } } }

multi_match:city 或 address中包含 kings 或 Ribera,并且在查询过程中,会对于查询条件进行分词

javascript GET /bank/_search { "query": { "multi_match": { "query": "kings Ribera", "fields": ["address","city"] } } }

match_phrase:对检索条件不进行分词,作为完整的一个词进行匹配

javascript GET /bank/_search { "query": { "match_phrase": { "address": "mill road" } } }

bool:组合多个条件

must:gender必须为M,address中必须包含 Kings 或 mill,会进行分词

must_not:age必须不是28

javascript GET bank/_search { "query": { "bool": { "must": [ { "match": { "gender": "M" } }, { "match": { "address": "Kings mill"} } ], "must_not": [ { "match": { "age": "28" } } ] } } }

should:匹配结果中的firstname字段最好有Cummings,没有也可以,有的话会增加评分

javascript GET bank/_search { "query": { "bool": { "should": [ { "match": { "firstname": "Cummings"} } ] } } }

filter:过滤,不会进行相关性得分

javascript GET bank/_search { "query": { "bool": { "filter": { "range": { "age": {"gte": 10, "lte": 30} } } } } }

Aggregations

语法

javascript "aggs":{ "aggs_name这次聚合的名字,方便展示在结果集中":{ "AGG_TYPE聚合的类型(avg,term,terms)":{} } }

搜索address中包含mill的所有人的年龄分布以及每个年龄段平均年龄(在上一次分组的基础上进一步分组统计),但不显示这些人的详情

javascript GET bank/_search { "query": { "match": { "address": "Mill" } }, "aggs": { "analysis": { // 起个分组的名字 "terms": { "field": "age", "size": 3 }, // terms:对年龄字段分组计数,只显示3条结果 "aggs": { // 在上一步分组的基础上进行进一步分组统计 "ageAvg": { // // 起个分组的名字 "avg": { // 求年龄字段的平均值 "field": "age" } } } } }, "size": 0 }

查出所有年龄分布,并且这些年龄段中M的平均薪资和F的平均薪资以及这个年龄段的总体平均薪资

```javascript GET bank/search { "query": { "matchall": {} }, "aggs": { "analysis": { // 起个分组的名字 "terms": { "field": "age", "size": 100 }, "aggs": { "genderAgg": { "terms": { "field": "gender.keyword" }, "aggs": {"balanceAvg": {"avg": { "field": "balance"}} } },

"ageBalanceAvg": {
      "avg": { "field": "balance" }
    }
  }
}

}, "size": 0 } ```

Mapping

Mapping映射:类似mysql中给某个字段指定字段类型,这个字段能不能被索引

查看某个索引下的映射

javascript GET /my_index

创建索引并指定映射

javascript PUT /my_index { "mappings": { "properties": { "age": { "type": "integer"}, "email": { "type": "keyword"}, "name": { "type": "text"} } } }

添加新的字段映射

javascript PUT /my_index/_mapping { "properties": { "employee-id": { "type": "keyword", "index": false // "index": false,表明新增的字段不能被检索,只是一个冗余字段 } } }

更新映射,数据迁移

对于已存在的字段映射,不能再更新,更新必须创建新的索引,进行数据迁移

先创建newbank的正确映射,再进行数据迁移

javascript POST _reindex { "source": { "index": "bank", "type": "account" // 原索引中带type,所以加上type; 如果原索引中没有type,这行不用写 }, "dest": { "index": "newbank" } }

整合SpringBoot

参考文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.4/java-rest-high.html

引入依赖

```java 7.4.2

org.elasticsearch.client elasticsearch-rest-high-level-client 7.4.2 ```

编写配置

java @Configuration public class ElasticSearchConfig { @Bean public RestHighLevelClient esRestClient() { RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("82.134.23.149", 9200, "http")) ); return client; } }

添加/更新记录

```java @Test public void indexData() throws IOException { User user = new User("ccb", "天津大学"); String jsonString = JSON.toJSONString(user);

IndexRequest request = new IndexRequest("users");
request.id("1");
request.source(jsonString,XContentType.JSON);

IndexResponse response = client.index(request, RequestOptions.DEFAULT);

System.out.println(response);

} ```

你可能感兴趣的:(elasticsearch,搜索引擎,大数据,全文检索)