Loading... 针对ES的 [Java High Level REST Client 7.17](https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high.html) 以及 Elasticsearch Guide 8.2 官方文档对使用到的API及对应参数进行学习和记录,以6.7作为生产环境使用。 PS:由于生产版本仅为6.7导致部分新特性的参数无法生效,并且同版本API文档也跟实际使用有所偏差。 <!--more--> # Indices APIs 包括索引、mapping、分析器在内的各种api用法 ## Mapping API ### 相关参数 **(1)analyzer** 分析器,包括自带的和自定义分析器,由***character filters*** -> ***tokenizer*** -> ***token filters***组成,在Analyzer API中再详细说明。 **(2)dynamic** 是否动态将新增的字段写入mapping中。 dynamic不仅可以在整个索引中设置,而且可以针对内部对象。 * `true`:新增字段自动加到mapping中 * `runtime`:7.11版本后新增运行时字段,不建立索引,在查询是通过 `fields`字段指定在 `_source`加载 [运行时字段](https://jishuin.proginn.com/p/763bfbd6808a) 可以对需要变动的mapping字段进行二次处理,实现动态添加,从而避免了重现索引、修改映射带来的繁琐处理,但会降低搜索速度 * `false`:不建立mapping不可被索引、搜索,在 `_source`加载,需要显式添加 * `strict`:新字段拒绝添加并抛出异常,需在mapping中添加 **(3)enable** 可在 `mappings`或具体字段中使用,它将跳过文档解析所以可以往里面怼进去任意类型,可以被搜索出来但不能被检索。 一般在 `_all`中使用,在6.0+中 `_all`默认被禁用(`enalbe=false`);`_all`字段能捕获所有字段并将它们的值连接成一个大字符串,使用空格作为分隔符,然后进行分析和索引,但不存储。这意味着它可以被搜索,但不能被检索。如有需要,建议使用 `copy_to` 替换功能。 **(4)properties** 存放以下属性(复杂类型的使用后续可以另开一贴):  * **分词查找字段**:text类型,ik_max_word_analyzer分词 * **时间戳(范围查询类,数值区分度高)**:long类型 * **其它如uuid、status(精确值或固定值查询类,数值区分度低)**:keyword [解释](https://www.jianshu.com/p/e9be6740b724):其中keyword类型term query用的是倒排索引,而numeric类型则用的是 `block KD tree`(类似B+树)。因此对于区分度不大的数值类型来说,整个树形结构会非常集中且臃肿,导致性能差。 Last modification:November 30, 2022 © Allow specification reprint Like 0 喵ฅฅ