<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
spring:data:elasticsearch:cluster-nodes: 172.16.251.142:9300
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {@Override@Beanpublic RestHighLevelClient elasticsearchClient() {final ClientConfiguration clientConfiguration = ClientConfiguration.builder().connectedTo("192.168.52.128:9200").build();ate(clientConfiguration).rest();}}
@SpringBootTest
public class TestRestClient {@Resourceprivate RestHighLevelClient restHighLevelClient;@Testpublic void addIndex() throws IOException {IndexRequest indexRequest = new IndexRequest("ems", "emp", "99");indexRequest.source("{"name":"Boot创建的","age":23}", XContentType.JSON);IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);System.out.println(indexResponse.status());}
}
@Testpublic void deleteIndex() throws IOException {DeleteRequest deleteRequest = new DeleteRequest("ems", "emp", "99");DeleteResponse deleteResponse = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);System.out.println(deleteResponse.status());}
@Testpublic void update() throws IOException {UpdateRequest updateRequest = new UpdateRequest("ems", "emp", "99");updateRequest.doc("{"name":"Boot创建的","age":88}",XContentType.JSON);UpdateResponse updateResponse = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);System.out.println(updateResponse.status());}
@Testpublic void bulk() throws IOException {BulkRequest bulkRequest = new BulkRequest();IndexRequest indexRequest1 = new IndexRequest("ems", "emp", "101");indexRequest1.source("{"name":"Boot创建的1","age":23}", XContentType.JSON);IndexRequest indexRequest2 = new IndexRequest("ems", "emp", "102");indexRequest2.source("{"name":"Boot创建的2","age":23}", XContentType.JSON);IndexRequest indexRequest3 = new IndexRequest("ems", "emp", "103");indexRequest3.source("{"name":"Boot创建的3","age":23}", XContentType.JSON);IndexRequest indexRequest4 = new IndexRequest("ems", "emp", "104");indexRequest4.source("{"name":"Boot创建的4","age":24}", XContentType.JSON);UpdateRequest updateRequest = new UpdateRequest("ems", "emp", "103");updateRequest.doc("{"name":"Boot创建的被修改","age":88}",XContentType.JSON);DeleteRequest deleteRequest = new DeleteRequest("ems", "emp", "104");bulkRequest.add(indexRequest1).add(indexRequest2).add(indexRequest3).add(indexRequest4).add(updateRequest).add(deleteRequest);BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);BulkItemResponse[] items = Items();for (BulkItemResponse item : items) {System.out.println(item.status());}}
@Testpublic void queryAll() throws IOException {SearchRequest searchRequest = new SearchRequest("ems");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(QueryBuilders.matchAllQuery()).size(99);pes("emp").source(searchSourceBuilder);SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHit[] hits = Hits().getHits();for (SearchHit hit : hits) {System.out.SourceAsString());}}
@Testpublic void search() throws IOException {SearchRequest searchRequest = new SearchRequest("ems");SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(QueryBuilders.matchAllQuery()).from(0).size(11).postFilter(QueryBuilders.matchAllQuery()).highlighter(new HighlightBuilder().field("*").requireFieldMatch(false));pes("emp").source(searchSourceBuilder);SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);System.out.println("符合条件的文档总数:"Hits().getTotalHits());System.out.println("符合条件的文档最大得分:"Hits().getMaxScore());SearchHit[] hits = Hits().getHits();for (SearchHit hit : hits) {System.out.SourceAsString());}}
/*** @Document 用在类上* 作用: 将Emp的对象映射成ES中一条json格式文档* indexName: 用来指定这个对象的转为json文档存入那个索引中 要求:ES服务器中之前不能存在此索引名* type : 用来指定在当前这个索引下创建的类型名称*/@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(indexName = "ems",type = "emp")
public class Emp {@Id //用来将对象中id属性与文档中_id 一一对应private String id;// 用在属性上 代表mapping中一个属性 一个字段 type:属性 用来指定字段类型 analyzer:指定分词器@Field(type = FieldType.Text,analyzer = "ik_max_word")private String name;@Field(type = FieldType.Integer)private Integer age;@Field(type = FieldType.Date)@JsonFormat(pattern = "yyyy-MM-dd")private Date bir;@Field(type = FieldType.Text,analyzer = "ik_max_word")private String content;@Field(type = FieldType.Text,analyzer = "ik_max_word")private String address;
}
@Document
: 代表一个文档记录
indexName
: 用来指定索引名称
type
: 用来指定索引类型
@Id
: 用来将对象中id和ES中_id映射
@Field
: 用来指定ES中的字段对应Mapping
type
: 用来指定ES中存储类型
analyzer
: 用来指定使用哪种分词器
//自定义EmpRepository
public interface EmpRepository extends ElasticsearchRepository<Emp,String> {//根据姓名查询List<Emp> findByName(String name);//根据年龄查询List<Emp> findByAge(Integer age);//根据姓名和地址List<Emp> findByNameAndAddressAndAge(String name, String address, Integer age);//根据姓名或年龄查询List<Emp> findByNameOrAge(String name, Integer age);//查询年龄大于等于 8List<Emp> findByAgeGreaterThanEqual(Integer value);}
NOTE:这种方式根据实体类中中配置自动在ES创建索引,类型以及映射
@SpringBootTest
public class TestEmpRepository {@Resourceprivate EmpRepository empRepository;@Testpublic void save(){Emp emp = new Emp();emp.setId(UUID.randomUUID().toString());emp.setName("西柚仔");emp.setAge(18);emp.setBir(new Date());emp.setContent("他是一个帅哥");emp.setAddress("深圳市");empRepository.save(emp);}
}
@Testpublic void delete(){empRepository.deleteById("b6a8bcf3-bd19-4cb7-b6b4-9074e869d771");}
@Testpublic void deleteAll(){empRepository.deleteAll();}
@Testpublic void findOne(){Optional<Emp> optional = empRepository.findById("acf4a5e3-4fee-44d9-9751-e96389264219");System.out.());}
@Testpublic void findAll(){Iterable<Emp> all = empRepository.findAll(Sort.by(Sort.Order.asc("age")));all.forEach(emp -> System.out.println(emp));}
@Testpublic void findPage(){Page<Emp> search = empRepository.search(QueryBuilders.matchAllQuery(), PageRequest.of(1, 5));search.forEach(emp -> System.out.println(emp));}
Keyword | Sample | Elasticsearch Query String |
---|---|---|
And | findByNameAndPrice | {"bool" : {"must" : [ {"field" : {"name" : "?"}}, {"field" : {"price" : "?"}} ]}} |
Or | findByNameOrPrice | {"bool" : {"should" : [ {"field" : {"name" : "?"}}, {"field" : {"price" : "?"}} ]}} |
Is | findByName | {"bool" : {"must" : {"field" : {"name" : "?"}}}} |
Not | findByNameNot | {"bool" : {"must_not" : {"field" : {"name" : "?"}}}} |
Between | findByPriceBetween | {"bool" : {"must" : {"range" : {"price" : {"from" : ?,"to" : ?,"include_lower" : true,"include_upper" : true}}}}} |
LessThanEqual | findByPriceLessThan | {"bool" : {"must" : {"range" : {"price" : {"from" : null,"to" : ?,"include_lower" : true,"include_upper" : true}}}}} |
GreaterThanEqual | findByPriceGreaterThan | {"bool" : {"must" : {"range" : {"price" : {"from" : ?,"to" : null,"include_lower" : true,"include_upper" : true}}}}} |
Before | findByPriceBefore | {"bool" : {"must" : {"range" : {"price" : {"from" : null,"to" : ?,"include_lower" : true,"include_upper" : true}}}}} |
After | findByPriceAfter | {"bool" : {"must" : {"range" : {"price" : {"from" : ?,"to" : null,"include_lower" : true,"include_upper" : true}}}}} |
Like | findByNameLike | {"bool" : {"must" : {"field" : {"name" : {"query" : "?*","analyze_wildcard" : true}}}}} |
StartingWith | findByNameStartingWith | {"bool" : {"must" : {"field" : {"name" : {"query" : "?*","analyze_wildcard" : true}}}}} |
EndingWith | findByNameEndingWith | {"bool" : {"must" : {"field" : {"name" : {"query" : "*?","analyze_wildcard" : true}}}}} |
Contains/Containing | findByNameContaining | {"bool" : {"must" : {"field" : {"name" : {"query" : "**?**","analyze_wildcard" : true}}}}} |
In | findByNameIn (Collection<String>names) | {"bool" : {"must" : {"bool" : {"should" : [ {"field" : {"name" : "?"}}, {"field" : {"name" : "?"}} ]}}}} |
NotIn | findByNameNotIn (Collection<String>names) | {"bool" : {"must_not" : {"bool" : {"should" : {"field" : {"name" : "?"}}}}}} |
Near | findByStoreNear | Not Supported Yet ! |
True | findByAvailableTrue | {"bool" : {"must" : {"field" : {"available" : true}}}} |
False | findByAvailableFalse | {"bool" : {"must" : {"field" : {"available" : false}}}} |
OrderBy | findByAvailable TrueOrderByNameDesc | {"sort" : [{ "name" : {"order" : "desc"} }],"bool" : {"must" : {"field" : {"available" : true}}}} |
@Testpublic void FindCustomize(){List<Emp> empList = empRepository.findByName("西柚仔");empList.forEach(emp -> System.out.println(emp));System.out.println("#################");List<Emp> empList1 = empRepository.findByAge(23);empList1.forEach(emp -> System.out.println(emp));System.out.println("#################");List<Emp> empList2 = empRepository.findByNameAndAddressAndAge("西柚仔", "深圳市", 18);empList2.forEach(emp -> System.out.println(emp));System.out.println("#################");List<Emp> empList3 = empRepository.findByNameOrAge("不知名", 18);empList3.forEach(emp -> System.out.println(emp));System.out.println("#################");List<Emp> empList4 = empRepository.findByAgeGreaterThanEqual(59);empList4.forEach(emp -> System.out.println(emp));}
@Testpublic void searchPageAndSort() throws IOException {SearchRequest searchRequest = new SearchRequest();SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.from(0).size(3).sort("age", SortOrder.ASC).query(QueryBuilders.matchAllQuery());searchRequest.indices("ems").types("emp").source(searchSourceBuilder);SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHit[] hits = Hits().getHits();for (SearchHit hit : hits) {System.out.SourceAsString());}}
@Testpublic void searchHighlight() throws IOException {SearchRequest searchRequest = new SearchRequest();SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();HighlightBuilder highlightBuilder = new HighlightBuilder();highlightBuilder.field("content").requireFieldMatch(false).preTags("<span style='color:red;'>").postTags("</span>");searchSourceBuilder.from(0).size(3).sort("age", SortOrder.ASC).Query("content","框架")).highlighter(highlightBuilder);searchRequest.indices("ems").types("emp").source(searchSourceBuilder);SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);SearchHit[] hits = Hits().getHits();for (SearchHit hit : hits) {System.out.SourceAsString());Map<String, HighlightField> highlightFields = HighlightFields();highlightFields.forEach((k,v)-> System.out.println("key: "+k+" value: "+v.fragments()[0]));}}
本文发布于:2024-01-28 05:41:49,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063917155200.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |