zoukankan      html  css  js  c++  java
  • Elasticsearch

    术语:

    Term :索引里最小的存储和查询单元,词;

    字典:Term的集合;

    倒排表:记录某些词出现在哪些文章中;

    正向信息:最原始的文档信息;

    段:索引中最小的独立存储单元,不可变;

    检索方式:

    单个词

    AND(分别查到词A和词B的文档链表,然后做交集运算)

    OR(做并集运算)

    NOT(做差集运算)

    分段储存:

    如果不分段储存的话,会生成一个非常大的倒排索引写入磁盘,并且如果索引有更新,就需要重新全量创建一个索引来替换原来的索引。这种方式在数据量很大时,效率过低。

    因此在搜索中引入了段的概念,讲一个索引文件拆分为多个子文件,则每个子文件叫做段,每个段都是一个独立的可搜索数据集。并且段具有不可变性。

    新增:新建一个段

    删除:新增一个.del文件,储存被删除的数据id。查询还能查得到,只是进行链表合并时会把删除的过滤掉,在段合并时才会真正的移除

    更新:删除+新增

    优点:

    不需要锁

    缓存友好

    增量创建

    缺点:

    空间浪费

    为了提升写的性能,使用了优化的方式。

    (1)新数据写入时,并没有直接写入硬盘中,而是暂时写入到内存,当内存中数据量达到一定阶段时,再批量提交到磁盘;

    (2)达到除法条件后,会将内存中缓存的数据一次性写入磁盘,并生成提交点;

    (3)清空内存;

    (4)一个段一旦拥有提交点,那么这个段只有读权限,失去写权限,相反,它在内存中时,只有写权限,没有读权限。

    段合并策略:

    检索过程:

    查询所有段中满足查询条件的数据,然后对每个段里查询的结果集进行合并,所以为了空值索引段里段的数量,必须定期进行段合并操作。但是如果每次合并所有的段,会造成资源浪费,所以,现根据段的大小进行分组,再将同一组的段进行合并,但是如果段特别大了,就不会再合并了。

  • 相关阅读:
    jQuery文件上传插件Uploadify(转)
    最简单易懂的SpringCloudSleuth教程
    微信协议简单调研笔记
    Base64 image
    javascript身份证号码验证
    基于微信的产品设计01:注册登录及账号体系设计
    android端 socket长连接 架构
    win7管理工具不可用
    http和socket之长连接和短连接区别
    Socket 长连接与短连接,心跳
  • 原文地址:https://www.cnblogs.com/hekiraku/p/12054187.html
Copyright © 2011-2022 走看看