为什么我的搜索 foo-bar 无法匹配 foo-bar ?
为什么增加更多的文件会压缩索引(Index)?
为什么 ElasticSearch 占用很多内存?
Inverted Index
Stored Fields
Document Values
Cache
一个有序的数据字典 Dictionary(包括单词 Term 和它出现的频率)。
与单词 Term 对应的 Postings(即存在这个单词的文件)。
* suffix→xiffus *,如果我们想以后缀作为搜索条件,可以为 Term 做反向处理。
(60.6384, 6.5017)→ u4u8gyykk,对于 GEO 位置信息,可以将它转换为 GEO Hash。
123→{1-hundreds, 12-tens, 123},对于简单的数字,可以为它生成多重形式的 Term。
Segments 是不可变的(immutable):
Delete?当删除发生时,Lucene 做的只是将其标志位置为删除,但是文件还是会在它原来的地方,不会发生改变。
Update?所以对于更新来说,本质上它做的工作是:先删除,然后重新索引(Re-index)。
随处可见的压缩:Lucene 非常擅长压缩数据,基本上所有教科书上的压缩方式,都能在 Lucene 中找到。
缓存所有的所有:Lucene 也会将所有的信息做缓存,这大大提高了它的查询效率。
为更重要的数据索引节点,分配性能更好的机器。
确保每个 Shard 都有副本信息 Replica。
根据索引信息,判断请求会被路由到哪个核心节点。
以及哪个副本是可用的。
等等。
Filters 可以在任何时候使用。
Query 只有在需要 Score 的时候才使用。