搜索引擎优化试题(什么是索引优化?索引所占空间的值?)
优采云 发布时间: 2021-10-17 08:28搜索引擎优化试题(什么是索引优化?索引所占空间的值?)
性能优化主要体现在两个方面:索引优化和检索优化。实际上,索引优化直接作用于检索优化。下面介绍的优化部分是应用层面的,下层部分jvm和es深度优化,本文暂不涉及。
一、索引优化
(1)字段索引类型选择优化
索引类型包括 es 中的 String、Integer、Long、Float 等简单类型,还有:Array(数组类型)、Object(对象类型)。一般应用前面的简单类型就足够了。这些类型也是es在Lucene的类型之上做的更加面向对象的封装。
索引类型选择原则:如果可以是数字类型,而不是字符串类型。除了索引大小的不同外,条件搜索的数值equals或range比字符串类型高几个数量级,尤其是数据量巨大的时候。
(2)字段索引选项优化
映射时,某个索引字段有多个选项,包括是否选择分词器(analyzer)、是否索引(index)、是否存储(store)。
索引时分词非常大。除了分词时间,一般会扩大索引占用的空间(增加term的数量,如果没有分词,term只能是1)。在选择分词器时,应该配置是索引分词还是nlp等不同类型的分词。
是否索引,字段是否可以用于条件搜索,如果不用于搜索,tokenizer等设置将无效。通常选择这样的设置字段进行存储。备注等字段经常是如果不需要索引,而是在查询的时候检索它的值,只需要设置为store store:yes即可。
是否存储,即该字段的值是否显示在搜索结果中,如果不选中,则在命中记录的结果集中看不到该字段的返回值。如果不存储,会大大降低索引占用空间的值。
(3)索引库系统配置优化
主要有两个参数,“index.translog.flush_threshold_ops”和“index.refresh_interval”。前者是es使用translog机制进行索引平衡时的一个重要参数。默认为5000,即当索引数超过这个值时,会执行一次Cluster equilibrium,而equilibrium比较耗时耗资源,所以应该放大。比如放大1-5倍是常见的选择。后一个参数主要是针对搜索引擎组中的延迟提交设置的,即系统提交要进行多长时间。如果设置为 -1,则需要手动提交才能使索引可见。
其次,索引合并过程中的段数、副本数、段数也会对索引和检索性能产生较大的影响,但默认设置可以解决大部分应用需求。
二、搜索优化
(1)同样的操作,对于数据值和字符串等非数字收据值这两个字段,前者会高几个数量级。
(2)尽量使用分页检索,不要一次检索太多,会给各方面带来很大压力,对并发性能影响较大。
(3)范围检索、排序等检索操作既费时又费资源。如果一定要使用,请尽量选择一个数值。这个问题可以通过合理的设计来解决。
(4)搜索大数据条件时,应该多加一些条件,以减少整体结果的命中量,即多条件检索比单条件检索更节省时间。在关系中做一些类似于现有数据的事情database 分区操作是一个不错的选择,比如使用数字字段,或者直接使用es的_type字段,当然后者应该比前者更受欢迎,在大数据条件下效果会更好。
由于es个人学习时间和深度有限,如有不足,欢迎交流。欢迎加入网络爬虫和nlp群320349384,分享IT相关技术问题。