Elasticsearch

2018-11-02  本文已影响0人  CoderZzbJohn

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

  1. keyword:存储数据时候,不会分词建立索引
  2. text:存储数据时候,会自动分词,并生成索引(这是很智能的,但在有些字段里面是没用的,所以对于有些字段使用text则浪费了空间)。

localhost:9200/_cat/indices 查询所有index

image.png

List类型的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.png

Index和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
上一篇下一篇

猜你喜欢

热点阅读