背景
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2,
"index": {
"routing": {
"allocation": {
"require": {
"node_group": "hot" // 1)
}
}
},
"store": {
"preload": [ // 2)
"knowledge",
"category",
"available",
"confidence",
"del",
"kid"
]
},
"search": {
"slowlog": {
"threshold": {
"query": {
"warn": "1s" // 3)
},
"fetch": {
"warn": "1s" // 3)
}
}
}
},
"translog": {
"flush_threshold_size": "512mb", // 4)
"sync_interval": "5m", // 4)
"durability": "async" // 4)
},
"sort": {
"field": [ // 5)
"kid",
"confidence"
],
"order": [ // 5)
"asc",
"desc"
]
}
}
}
}
说明: 1.由于向量数据较大,所以倾向于将整个索引都放置在硬件性能更好的节点 2.为了支持高性能过滤,将常用的字段预先加载在内存中 // TODO 3.对慢查询开启日志方便后续性能问题的调查 4.知识库的重建是离线的,会在更新时进行大量写入,所以对 translog 的提交间隔拉长,加快写入速度 // TODO 5.在实际使用中kid是自增id,同时可能会对知识的置信度做排序等,所以会使用 sort field 存储这两个字段。 // TODO
从文章可以学到
1.提高过滤速度。将常用字段预先加入内存,空间换时间。
2.提高写入索引的速度。 增加translog刷盘间隔。
参考
1.干货 | Elasticsearch 向量搜索的工程化实战
原创文章转载请注明出处: 干货 | Elasticsearch 向量搜索的工程化实战