首先要阐述一个观点,任何技术都是为解决某一个领域的问题而存在的,我们在使用它的时候,尽可能使用它的优势(亮点),去发挥它应具备的业务价值。es在很多公司应用非常广泛,它已经成为玩大数据的必备的技能,在之前的章节我吐槽过es写方面的问题,今天将吐槽下es查询-terms语法的那些坑,这里探讨两点:一个是多terms并发带来高CPU,另一个是terms使用不当会导致bug。
业务场景
我们基于门店+商品做了一个业务上的大宽表,有各种维度的查询,需要分页,比如按商品的采购组织、采购组、商品的类别(部类-大类-中类-小类)、商品名称查询等
{
undefined
"from": 0,
"size": 200,
"timeout": "30s",
"query": {
undefined
"bool": {
undefined
"must": [
{
undefined
"terms": {
undefined
"purchase_org_code": [
"${purchase}"
],
"boost": 1.0
}
},
{
undefined
"terms": {
undefined
"purchase_group_code": [
"P05",
"P06",
"P07",
"P08",
"P09",
"P10",
"P11",
"U01",
"U02",
"U03",
"U04",
"U05",
"U06",
"U07",
"U08",
"U09",
"U10",
"U11",
"U12",
"U13",
"U15",
"U16",
"U17",
"U18"
],
"boost": 1.0
}
},
{
undefined
"terms": {
undefined
"product_code": [
"${product1}",
"${product2}",
"${product3}",
"${product4}",
"${product5}"
],
"boost": 1.0
}
}
],
"adjust_pure_negative": true,
"boost": 1.0
}
}
}
集群规模
目前集群规模也不大,版本是6.7.1,大概是