搜索引擎基础

分片和副本相关基础:

number_of_shards :类似我们分库分表, 一经定义,不可更改。影响写入操作。

比如有四条数据

id:1234.

2个shards  

id%len   = ?

1和3存在shard1  

2和4存在shard2

如果突然修改了分片数,就只能重建索引了。

numer_of_replicas:副本数  ,用来备份分片的和分片里的数据保持一直,只要用相应读操作,副本越多读取速度越快。(可以随便调整)

分布式索引的分片数量一定不难更改,8核cpu  16g的机器一个分片不超过500g,索引会根据分片的配置来均匀的相应用户请求。

如果装了head , 


像这样, 比较粗的就是分片在哪个集群上。

写请求:不管咋样都会到master节点上要到master节点上hash取模来判断存到哪个shard上去。

读请求:不一定要到master,因为每个node上都存了节点信息。读也是确定hash,然后到哪个分片上读。


put:全量修改数据。

post:部分修改数据。(在kinbana里记得加_update)


es基础类型:

type:文本类型(可以被分析)。

keyword:不可以被分析。要求全字匹配的文本。

date:日期类型, 通常配合format使用,{“type”:‘date“,”format“:yyyy-MM-dd”},

long, short, intger,

array :数组类型,但是因为性能, 几乎没什么用的。

object: 一般是json。

ip: ip地址

goe    (地理位置,geohash应该是): lat,let


es查询:

1.主键查询。

2.查询all。

3.分页查询。

es分页不能分的太多, 因为都在内存里进行,所以es不支持全部导出,分页千万别超出一万。

4.待条件查询。

5.排序查询(sort)。

6.聚合查询,(支持很多,avg,min,max, sum等)


分词相关:

es默认分词器stander,把每个字都分开。

做了一个标准化, 英文默认优化,会提取词干,例如apples , 直接提取成apple。

ik分词器:

sname的话,用的贪心算法, 尽量分词长的。

是不是就意味着stander分词没用了?其实并不是这样的哦

托底,搜江大桥没有,在建了ik的字段,在建一个一样的stander的字段。如果ik搜不到 就可以搜这一个stander分词的,这样保证会又结果。但是慎用,因为占空间,有些特殊的系统可以使用。

其实ik也还有一个解决的办法叫砍词:江大桥 我可以砍掉一个词,我砍掉江 就出来了。砍词的策略可以自定义

江大桥:电商中。我们系统假设有大桥这个品牌。 我会一个个的是去试一下,比如可以用字符串匹配找出大桥。也有很多系统很粗暴,直接从第一个字开始砍,一直砍到有为止。

既有英文又有中文的 直接选ik

如果不用砍词那就要去词库加词,比如加入江大桥就可以了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。