Elasticsearch
安装(7.12)
官网 地址:https://www.elastic.co/
下载后直接以bin目录中elasticsearch文件启动,系统需要安装好jdk
config文件夹中jvm.options文件中定义es的jvm各项配置
笔记本上开启es时要注意非常吃内存,可在该文件中修改-Xms与-Xmx参数,不然可能申请内存不足启动失败
http://localhost:9200 访问看是否正常启动,正常返回值
{
"name" : "B000000338032",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "BTfxGnO-QiuyFYWgzsxMnQ",
"version" : {
"number" : "7.10.2",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
"build_date" : "2021-01-13T00:42:12.435326Z",
"build_snapshot" : false,
"lucene_version" : "8.7.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
客户端图形工具:
elastichd
开发sdk
此处主要讨论java
sdk种类
官方推荐:
1、Java Low Level REST client
2、Java Low High REST client
spring家族:spring-data-elasticsearch
spring-data-elasticsearch
Entity:
@Document(indexName = "person")
@Data
public class Person {
@Id
@Field(type = FieldType.Long)
private Long id;
@Field(type = FieldType.Keyword)
private String firstname;
@Field(type = FieldType.Keyword)
private String lastname;
}
Repository:
public interface PersonRepository extends CrudRepository<Person, Long> {
List<Person> findByLastname(String lastname);
List<Person> findByFirstnameLike(String firstname);
}
Service:
@Service
public class MyService {
@Autowired
private final PersonRepository repository;
public MyService(PersonRepository repository) {
this.repository = repository;
}
public void doWork() {
repository.deleteAll();
Person person = new Person();
// person.setId(1L); 不设置id es会自动生成一个随机字符串作为id
person.setFirstname("Oliver");
person.setLastname("Gierke");
repository.save(person);
List<Person> lastNameResults = repository.findByLastname("Gierke");
List<Person> firstNameResults = repository.findByFirstnameLike("Oli");
return;
}
}
es存储结果:
关键名词
索引(index):相当于mysql的数据库,只是一个用来指向一个或多个分片(shards)的“逻辑命名空间”
类型(type):相当于关系型数据库中的表,每个 类型(type)都有自己的映射(mapping)或者结构定义,就像传统数据库表中的列一样。所有类型下的文档被存储在同一个索引下,但是类型的映射(mapping)会告诉Elasticsearch不同的文档如何被索引
唯一标识(id):唯一标识一个文档,相当于mysql的主键
分片(shard) :最小级别的工作单元,他只是保存了索引中所有数据的一部分,分片就是一个lucene实例。我们的文档存储在分片中,并且在分片中被索引,但应用程序不会直接与分片进行通信,而是直接与索引进行通信。
当集群扩容或缩小,ES会自动在你的节点间迁移分片,使集群保持平衡。分片可以是主分片和复制分片。索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。