19.1 准备elastic search
19.1.1 是什么
是一个全文搜索服务器
19.1.2 简单使用
以windows为例进行简单使用
19.1.2.1 下载
elasticsearch
kibana
elasticsearch ik分词器

19.1.2.2 安装
-
安装elasticsearch
直接解压就OK
-
配置elasticsearch及ik分词器
修改jvm参数

解压拷贝到es plugins下面

-
安装客户端kibana
直接解压就OK

-
测试
启动es

启动kibana进行测试


19.2 Springboot操作elastic search-方案选择
19.2.1 原生ESTransport Client方式
就相当于写jdbc代码,非常麻烦.
19.2.2 springboot springdata elastic search
spring data
是spring对数据访问抽象.这些数据可以db,index,nosql等包含以下:
spring data jpa spring对关系型数据库访问支持
spring data ES spring对es数据访问支持
spring data redis等 spring对redis数据访问支持
spring data …
springboot spring data es
对 spring data es简化了配置.
采纳它,比较简单
19.3 springboot springdata elasticsearch入门
步骤分析:
1 准备一个springboot项目
2 在springboot中导入spring data elastic search的strarter
3 application.yml中进行配置
4 写代码测试
19.3.1 准备一个springboot项目
略过
19.3.2 springboot中导入spring data elasticsearch的strarter
<!--springboot 对spring data es支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
19.3.3 application.yml中进行配置
spring:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9300 #9200是图形界面端,9300代码端
19.3.4 写代码测试
package org.yaosang.doc;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
@Document(indexName = "crm",type = "person")
public class Person {
@Id
private Long id;
private String name; // zs
private Integer age;
private String intro; //zs is disaosi
@Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
private String all; //所有要做模块查询的字段值通过“ ”隔开 zs zs is disaosi
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIntro() {
return intro;
}
public void setIntro(String intro) {
this.intro = intro;
}
public String getAll() {
return name+" "+intro;
}
public void setAll(String all) {
this.all = all;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", intro='" + intro + '\'' +
", all='" + all + '\'' +
'}';
}
public Person(Long id, String name, Integer age, String intro) {
this.id = id;
this.name = name;
this.age = age;
this.intro = intro;
}
public Person() {
}
}
package org.yaosang.repository;
import cn.itsource.doc.Person;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface PersonRepository extends ElasticsearchRepository<Person,Long> {
}
@RunWith(SpringRunner.class)
@SpringBootTest(classes = EsApplication.class)
public class EsTest {
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
@Autowired
private PersonRepository repository;
@Test
public void testInit() throws Exception{
System.out.println(elasticsearchTemplate);
elasticsearchTemplate.createIndex(Person.class); //创建索引库
elasticsearchTemplate.putMapping(Person.class);//创建自定义映射
}
@Test
public void testAdd() throws Exception{
repository.save(new Person(1L,"zs",18,"zs is nb ren!"));
}
@Test
public void testAddAll() throws Exception{
List<Person> persons = new ArrayList<>();
for (int i = 0; i < 50; i++) {
persons.add(new Person(i+2L,"zs"+i,19+i,"zs "+i+" dbl ddh"));
}
repository.saveAll(persons);
}
@Test
public void testGetOne() throws Exception{
Optional<Person> optional = repository.findById(1L);
Person person = optional.get();
System.out.println(person);
}
@Test
public void testGetAll() throws Exception{
Iterable<Person> all = repository.findAll();
Iterator<Person> iterator = all.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
@Test
public void testDel() throws Exception{
repository.deleteById(50L);
//repository.deleteAll();
Optional<Person> person = repository.findById(50L);
System.out.println(person.get());
}
@Test
public void testUpdate() throws Exception{
Optional<Person> optional = repository.findById(49L);
Person person = optional.get();
System.out.println(person);
person.setName(person.getName()+" edit");
repository.save(person);
repository.findById(49L);
person = optional.get();
System.out.println(person);
}
//dsl
/**{
"query": {
"bool": { 与(must) 或(should) 非(must not)
"must": [
{"match": {"description": "search" }}
],
"filter": {
"term": {"tags": "lucene"}
}
}
},
"from": 20,
"size": 10,
"_source": ["fullName", "age", "email"],
"sort": [{"join_date": "desc"},{"age": "asc"}]
}
* */
// select id,name from t_user where name like %xxx% order by id desc limit 0,10
@Test
public void testDsl() throws Exception{
NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
//1 查询+过滤
BoolQueryBuilder bool = QueryBuilders.boolQuery(); //query bool
bool.must(QueryBuilders.matchQuery("all","zs")); //query bool must match
bool.filter(QueryBuilders.rangeQuery("age").lte(40).gte(20));//query bool filter
builder.withQuery(bool);
//2 排序
builder.withSort(SortBuilders.fieldSort("age").order(SortOrder.DESC));//通过age倒序排列
//3 分页
builder.withPageable(PageRequest.of(0,10));//当前页,每页显示多少个。
//4 截取字段
builder.withSourceFilter(new FetchSourceFilter(new String[]{"name","age","id"},
null));
//5 获取
Page<Person> page = repository.search(builder.build());
System.out.println("总页数:"+page.getTotalPages());
System.out.println("总数:"+page.getTotalElements());
for (Person person : page.getContent()) {
System.out.println(person);
}
}
}
19.3 小结
本章节讲解了springboot通过spring data elasticsearch完成了对elasticsearch的操作
本文介绍了如何在Spring Boot项目中集成Elasticsearch,并利用Spring Data Elasticsearch进行数据操作。包括环境搭建、基本配置以及通过代码实现增删改查等功能。
1221

被折叠的 条评论
为什么被折叠?



