Elasticsearch 全文搜索,结构化搜索、数据分析、复杂的语言处理、地理位置和对象间关联关系等。
如何给数据建模来充分利用 Elasticsearch 的水平伸缩性,
以及在生产环境中如何配置和监视集群。
信息检索的概念、分布式系统原理、Query DSL
集群内的原理 、 分布式文档存储 、 执行分布式检索 和 分片内部原理
元数据,用于标注文档的相关信息
_index:文档所在索引的名字
_type:
_id:文档唯一id
_uid:
_source:原始json数据
_all:已禁用
每个index都有个mapping定义,定义字段名和类型
一。基本原理
1.倒排索引
根据文档内容找到对应的id,会对内容进行分词
基本执行步骤:1.通过倒排索引获得关键词对应的文档id ,1,3
2.通过正排索引查询1和3的完整内容
3.返回结果
倒排索引的组成:
1.单词词典(Term Dictionary)
一般是用 B+Tree
记录所有文档的单词
记录单词到倒排列表的关联信息
2.倒排列表(Posting List)
包含:文档id
单词频率(TF,Term Frequency)
位置(分词的位置)
偏移(记录单词的开始和结束位置)
2.正排索引
id到文档内容
3.分词(将文本转换为一系列的单词)
Character Filters(处理原始文本)
Tokenizer(切分单词)
Token Filters(转小写,删除无意义的,新增近义词,同义词)
4.Mapping
定义index下的字段名
定义字段类型
定义倒排索引相关配置,如是否索引等
5.数据类型
字符串 text,keyword
数值型 long,interger,short,byte,double,
float,half_float,scaled_float
日期类型 date
布尔类型 boolean
二进制类型 binary
范围类型
复杂类型 array
object
nested object
6.Search API
URI Search (在URL里操作)
如: GET /my_index/_search?q=name:hyh
Pequest Body Search (用json格式查询)
二。语法
1.索引操作
创建:PUT /test_index
查看:GET _cat/indices
删除:DELETE /test_index
2.文档操作
创建:(指定id)
PUT /test_index/doc/1
{
"username":"aaa",
"age":1
}
文档会有一个版本号,锁的机制
创建文档时会自动创建index和type
创建:(不指定id)
POST /test_index/doc
{
"username":"aaa",
"age":1
}
查询:
GET /test_index/doc/1
查询所有文档:
GET /test_index/doc/_search
{
"query":{
"term":{
"_id":"1"
}
}
}
返回数据说明:
took 耗时 ms
hits:命中的文档
total:文档数
hits:文档数组,默认返回10条数据
_score:相关性得分
3.批量创建文档API
endpoint为_bulk
POST _bulk
{"index":{"_index":"test_index","_type":"doc","_id":"3"}}
{json}
{"delete":{"_index":"test_index","_type":"doc","_id":"3"}}
{"update":{"_index":"test_index","_type":"doc","_id":"3"}}
{"doc":{json}}
返回内容
itms:每个操作的结果
index的id如果不存在,则新建,如存在,则覆盖
update的id必须存在
4.批量查询文档API
GET /_mget
{"docs":[json]}
PUT /megacorp/employee/1
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}
5.Analyze API
自带分词器
POST _analyze
{
"analyze":"standard",
"text":"hello world!"
}
自定义分词器
POST _analyze
{
"tokenizer":"standard",
"filter":["lowercase"], //过滤
"text":"hello world!"
}
6.Mapping API
查询mapping
GET /test_index/_mapping
定义mapping
PUT my_index
{
"mapping":{ //mapping
"doc":{ //指定type
"properties":{ //字段定义
"title":{ //字段名称
"type":"text" //字段类型
}
}
}
}
}
dynamic : true 可以新增
false 可以新增,但无法查询
strict 不能写入
copy to :将几个字段合到一起
,复制到另一个字段里,用来查询
index :true 该字段可以搜索
false 该字段不搜索
index_options :倒排索引记录的内容
docs
freqs
positions
offsets
null_value:可以设置NULL 或者默认值