集群状态
Green : 主分片和副本分片正常分配。
Yellow : 主分片正常分配, 副本分片未正常分配。
Red: 有主分片为正常分配。
index 和create 不一样的地方
index 和create 不一样的地方: 如果文档不存在,就索引新的文档,否责现有的文档会被删除,新的文档会被索引, 版本信息加+1
index时会检查_version。如果插入时没有指定_version,那对于已有的doc,_version会递增,并对文档覆盖。插入时如果指定_version,如果与已有的文档_version不相等,则插入失败,如果相等则覆盖,_version递增。
create时也会检查_version,但是对于已有的文档,不会创建新文档,即插入失败。
PUT my_index/_doc/1
{
"tag":"指定id"
}
PUT my_index/_create/1
{
"tag":"指定id"
}
ElasticSearch中有内部版本号和外部版本号之分。使用内部版本号是要求指定的version字段和当前的version号相同。但在使用外部版本号时要求当前version号小于指定的版本号。如果请求成功,外部版本号作为文档新的version号进行存储。
外部版本号命令:
PUT /website/blog/2?version=5&version_type=external
内部版本号命令:
PUT /website/blog/1?version=1
如果主数据库有版本字段——或一些类似于timestamp等可以用于版本控制的字段——是你就可以在Elasticsearch的查询字符串后面添加version_type=external来使用这些版本号。版本号必须是整数,大于零小于9.2e+18——Java中的正的long。
外部版本号与之前说的内部版本号在处理的时候有些不同。它不再检查_version是否与请求中指定的一致,而是检查是否小于指定的版本。如果请求成功,外部版本号就会被存储到_version中。
外部版本号不仅在索引和删除请求中指定,也可以在创建(create)新文档中指定。
参考:
https://www.jianshu.com/p/649916740726
Bulk api
支持再一次api调用中,对不同类型的索引进行操作。
支持同时 index,create,update,delete操作。
POST _bulk
{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }
{ "field1" : "value1" }
{ "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
{ "field1" : "value3" }
操作中单条操作失败,不会影响其他操作。
返回的结构包括,每一条的执行结果。
倒排索引的核心组成部分
倒排索引包含两个部分
-
单词词典 ,
记录所有文档的单词,记录单词到倒排列表的关联关系。
单词字典一般比较大,可以通过B+ 树或哈希拉链法实现,以满足高性能的插入或者查询。
倒排列表 记录了单词对应的文档结合,由倒排索引组成。 -
倒排索引项:
- 文档ID
- 词频TF – 该单词在文档中出现的次数,用于相关性评分。
- 位置(Position)-- 单词在文档中分词的位置, 用于语句搜索。
- 偏移(offset) 记录单词开始结束的位置,实现高亮显示。
analyzer 分词
分词器三部分组成
- character Filters(针对原始文本处理,例如去除html)
- Tokenizer(按照规则切分为单词)
- Token Filter (将切分的单词进行加工, 小写,删除stopwords,增加同义词等)