一.keyword 字段和keyword数据类型
   1、测试准备数据

       2、查询mapping
    测试2:使用articleID.keyword搜索

      结果:
       默认是analyzed的text类型的field,建立倒排索引的时候,就会对所有的articleID分词,分词以后,原本的articleID就没有了,只有分词后的各个word存在于倒排索引中。
       term,是不对搜索文本分词的,XHDK-A-1293-#fJ3 -->
XHDK-A-1293-#fJ3;但是articleID建立索引的时候,XHDK-A-1293-#fJ3 -->
xhdk,a,1293,fj3

        5、定义keyword数据类型的字段
                 (1)删除索引 DELETE /forum
               (2)重建索引
                (4)测试articleID查询
6、小结
        (1)term filter:根据exact
value进行搜索,数字、boolean、date天然支持
                (2)text需要建索引时指定为not_analyzed,才能用term
query
二、filter执行原理深度剖析
        1、bitset机制
         
每个filter根据在倒排索引中搜索的结果构建一个bitset(位集),用以存储搜索的结果。简单的数据结构去实现复杂的功能,可以节省内存空间,提升性能。bitset,就是一个二进制的数组,数组每个元素都是0或1,用来标识一个doc对一个filter条件是否匹配,如果匹配就是1,不匹配就是0。比如:[0, 1, 1]。
                遍历每个过滤条件对应的bitset,优先从最稀疏的开始搜索,查找满足所有条件的document(先遍历比较稀疏的bitset,就可以先过滤掉尽可能多的数据发)
      2、caching
bitset机制
            跟踪query,在最近256个query中超过一定次数的过滤条件,缓存其bitset。对于小segment(<1000,或<3%),不缓存bitset。在最近的256个filter中,有某个filter超过了一定的次数,次数不固定,就会自动缓存这个filter对应的bitset。filter针对小segment获取到的结果,可以不缓存,segment记录数<1000,或者segment大小<index总大小的3% segment数据量很小,此时哪怕是扫描也很快;segment会在后台自动合并,小segment很快就会跟其他小segment合并成大segment,此时就缓存也没有什么意义,segment很快就消失了。
            cache biset的自动更新:如果document有新增或修改,那么cached
bitset会被自动更新
        3、filter与query的对比
三、基于bool组合多个filter条件来搜索数据
1、搜索发帖日期为2017-01-01,或者帖子ID为XHDK-A-1293-#fJ3的帖子,同时要求帖子的发帖日期绝对不为2017-01-02
2、搜索帖子ID为XHDK-A-1293-#fJ3,或者是帖子ID为JODL-X-1937-#pV7而且发帖日期为2017-01-01的帖子

四、term和terms



五、filter
range
   
        测试数据:
                为帖子数据增加浏览量的字段
六、match
query 精准查询

                   bool组合多个搜索条件,如何计算relevance
score

































05-02 08:09