美文网首页
Elasticsearch

Elasticsearch

作者: CoderZzbJohn | 来源:发表于2018-11-02 23:28 被阅读0次

    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

    相关文章

      网友评论

          本文标题:Elasticsearch

          本文链接:https://www.haomeiwen.com/subject/ugeztqtx.html