Elasticsearch
curl -XPOST 'localhost:9200/customer/external/1/_update?pretty' -d '
{
"script" : "ctx._source.age += 5"
}'
ctx._source指向当前被更新的文档
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match_all": {} },
"_source": ["account_number", "balance"]
}'
默认情况下,是返回完整的JSON文档的。这可以通过source来引用(搜索hits中的_sourcei字段)
过滤器filter与query类似,都是查询功能。不同点:
1.过滤器不计算得分,查询速度快。
2.过滤器会缓存结果,速度快。
出现如下错误是因为 index已经建立好之后,mapping无法在修改。只能删了index重新设置mapping。
{
"error": {
"root_cause": [
{
"type": "resource_already_exists_exception",
"reason": "index [my_index/niotLCjpTmCIjCsTivAMcg] already exists",
"index_uuid": "niotLCjpTmCIjCsTivAMcg",
"index": "my_index"
}
],
"type": "resource_already_exists_exception",
"reason": "index [my_index/niotLCjpTmCIjCsTivAMcg] already exists",
"index_uuid": "niotLCjpTmCIjCsTivAMcg",
"index": "my_index"
},
"status": 400
}
1.DELETE /my_index
2.PUT /my_index
{
"settings":{
"number_of_shards":3,
"number_of_replicas":0
},
"mappings":{
"student":{
"properties":{
"name":{
"type":"text",
"analyzer": "standard"
},
"age":{
"type":"text",
"analyzer": "standard"
}
}
}
}
}
字符串 string类型取消了 .es6之后
text 和 keyword
- keyword:存储数据时候,不会分词建立索引
- text:存储数据时候,会自动分词,并生成索引(这是很智能的,但在有些字段里面是没用的,所以对于有些字段使用text则浪费了空间)。
localhost:9200/_cat/indices 查询所有index
image.pngList类型的mapping
image.png
// setSource中,一定要把json写在前面, XContentType在后面 。 否则可能出现如下异常
The number of object passed must be even but was [1]
image.png// 如果直接传入resume对象,整个source是字符串。因此要传json格式数据。
image.png image.png image.png
给索引增加别名
image.png
集群:一个集群对应有一个名字。由一个或多个节点构成。
节点:一个Es实例。一台机器,可以启动多个es实例,构成多个节点。
分片:一个index可以拆分成多个分片,将数据分散在多个节点中。相当于分库。
ES内存:
ES深分页:Scroll,SliceId
image.pngIndex和Create区别。
Index:当指定id,并且这个id已经存在es中,则更新,先删除在新增,version+1,只有index参数中的新字段。(与update不同,update如果是相同字段会更新,缺少的字段则新增字段)。InsertOrUpdate
Create:指定id,当id已经存在时,报错。
ES分词:Character Filters(原始文本处理,例如去除html) -> Tokenizer(分词) -> Token Filter (分词之后的单词进行加工,例如转小写,增加同义词,复数转单数等)
Mapping:mapping可以设置dymanic(true,false,strict)。当dymanic为true时,新增字段会自动修改mapping,按照es自动分析的字段类型来。当dymanic为false时,新增字段不会修改mapping,该字段不会被索引,无法搜索,但是字段会在source中返回。dymanic为strict时,出现新字段时直接报错。
image.png
"myField":{
"type":"text",
"index":"false" 该字段不会创建索引,无法搜索
}
index template。创建新索引时,先使用模版,然后在用用户自定义的来覆盖,如果没有自定义则默认使用模版中定义的mapping和setting。
image.png image.png
通过设置constant_score将query查询转换成filter,跳过算分步骤,增加缓存提高性能。
image.png
term查询,包含查询词。ES中如果是数组,包括term中的值即返回。
terms查询,包含查询词中的任意一个,可以通过minimum_match设置。 ??经测试,报错
评分:TF-IDF。
TF:词频。在该文档中出现的次数/该文档总词数。代表这个单词在这个文档中出现的概率
IDF:逆文档频率。文档总数/出现该单词的文档数。 值为log(文档总数/出现该单词文档数)
copy_to: 可以将几个字段合成另一个新的字段,新的字段只能用来搜索,source中不会返回。
cerebro。查看es节点信息工具。0.8.3最新
image.png
master节点控制创建,删除索引。普通的增删改查任意一个节点都能处理与转发请求。
image.png
获取所有文档:scroll
深分页: Search After,只能每次往后查
es并发更新:通过乐观锁控制。低版本ES通过version字段,高版本废除了version,通过咱们自己维护的version=100&version_type=external或者 es自身维护的if_seq_no=1&if_primary_term=2.
image.png image.png image.png image.png image.png image.png
对text字段进行分桶,每个桶中的数据是分词之后的结果。
image.png