运行环境:10数据节点+3主节点。版本7.6.2。数据节点64G内存+16核CPU+SSD。索引110个,总数量3.33T。
查询的索引 10个分片,2.5亿数据(实际为全国工商企业的基本信息)。查询的字段是默认分词,standard,查询语句如下:
求教各位大佬,要求1秒内响应
查询的索引 10个分片,2.5亿数据(实际为全国工商企业的基本信息)。查询的字段是默认分词,standard,查询语句如下:
GET base/_search
{
"track_total_hits": true,
"query": {
"match_phrase": {
"entName": "信息技术"
}
},"size": 20
}
响应结果如下: "took" : 4585,
"timed_out" : false,
"_shards" : {
"total" : 10,
"successful" : 10,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 431330,
"relation" : "eq"
},
在不改匹配方式与分词器的情况下,有办法优化吗?试过二次打分,一是效率没有明显提升,二是会影响业务上的排序。求教各位大佬,要求1秒内响应
3 个回复
Charele - Cisco4321
赞同来自:
huahualal
赞同来自:
zmc - ES PAAS、JuiceFS
赞同来自:
1.数据预热,提前加载好缓存,如果你们的数据大多是热数据,那缓存后会快很多
2.如果响应时间要求不高,且qps比较高,可以通过加cpu配置缓解问题
3.使用term查询,配置自定义词库,利用分词解决问题
4.先filter,match全文检索找到结果集合,然后在结果集合中取前x条进行match_phrase重新打分,根据分数大到小返回;这个方案线上测过,对于很复杂的请求优化很有限,你这个相对简单的请求可以测一把看看...