1. 全文搜索 #
- 开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。
- 它可以快速地储存、搜索和分析海量数据
2. 安装 #
- 安装 jdk
- 安装 elasticsearch
3. 访问 #
http://localhost:9200/
{
"name" : "PC-201704292335",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "pb4rTAeoSxyLgJGtyz4fAg",
"version" : {
"number" : "5.6.10",
"build_hash" : "b727a60",
"build_date" : "2018-06-06T15:48:34.860Z",
"build_snapshot" : false,
"lucene_version" : "6.6.1"
},
"tagline" : "You Know, for Search"
}
- C:\ProgramData\Elastic\Elasticsearch\config\elasticsearch.yml 配置文件
4. 基本概念 #
4.1 节点和集群 #
- Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例
- 单个 Elastic 实例称为一个节点node。一组节点构成一个集群cluster
4.2 索引 #
- Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引
- Elastic 数据管理的顶层单位就叫做 Index(索引),Index (即数据库)的名字必须是小写
4.3 文档 #
- Index 里面单条的记录称为 Document(文档)
- 许多条 Document 构成了一个 Index
- Document 使用 JSON 格式表示
4.4 类型(Type) #
- 文档可以分组,比如学生这个Index里面,可以按姓别分组(男生一组,女生一组),也可以按省份分组(北京和广东)
- 这种分组就叫做类型,它是虚拟的逻辑分组,用来过滤文档
- 不同的类型应该有相似的结构
- 每个 Index 包含一个 Type,7.x 版将会彻底移除 Type
5. 操作Index #
5.1 创建索引 #
curl -X PUT 'http://localhost:9200/student'
5.2 删除索引 #
curl -X DELETE 'http://localhost:9200/student'
6. 数据操作 #
6.1 新增文档 #
curl -X PUT 'http://localhost:9200/student/city/1' -d`
{
"name":"张三",
"age":5,
"city":"北京"
}
`
curl -X POST 'http://localhost:9200/student/city' -d`
{
"name":"赵六",
"age":7,
"city":"江苏"
}
`
6.2 查看文档 #
curl 'http://localhost:9200/student/city/1'
6.3 更新记录 #
curl -X PUT 'http://localhost:9200/student/city/1' -d`
{
"name":"张三2",
"age":55,
"city":"北京2"
}
6.4 删除文档 #
curl -X DELETE 'http://localhost:9200/student/city/1'
7. 数据查询 #
7.1 查询全部 #
curl 'http://localhost:9200/student/city/_search'
7.2 全文搜索 #
curl 'http://localhost:9200/student/city/_search' -d `
{
"query" : { "match" : { "name" : "李" }},
"size":1,
"from":1
}
`
7.3 OR #
curl 'http://localhost:9200/student/city/_search' -d `
{
"query" : { "match" : { "name" : "赵 李" }}
}
`
7.4 AND #
curl 'http://localhost:9200/student/city/_search' -d `
{
"query": {
"bool": {
"must": [
{ "match": { "name": "赵" } },
{ "match": { "name": "六" } }
]
}
}
}
`
8. node中如何用 #
var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({
host: 'localhost:9200',
log: 'trace'
});
(async function () {
let name = Date.now();
let id = Date.now();
const created = await client.create({
index: 'student',
type: 'city',
id,
body: {
name,
age: 10
}
});
console.log(created);
const updated = await client.update({
index: 'student',
type: 'city',
id,
body: {
doc: {
name: name,
age: 101
}
}
});
console.log(created);
console.log(deleted);
})().then(ret => console.log(ret), err => console.log(err));
9. 参考 #