我们正在使用ElasticSearch8.6.2来支持一个搜索应用程序。对于一个用例,我们正在运行一个模糊搜索,但在较高的并发性下性能不是很好。
我们尝试用以下方式对搜索查询进行建模:
{
"size": 20,
"query": {
"bool": {
"must": {
"fuzzy": {
"valCol": {
"value": "dhsaads"
}
}
},
"filter": [
{
"terms": {
"fil1": [23,123,13]
}
},
{
"terms": {
"fil2": [443,121,532]
}
}
]
}
}
}
结果符合预期,但在较高TPS负载下运行时,延迟相当高。我们注意到磁盘I/O在此成为瓶颈。从Kibana上的查询分析器中,我们可以了解到过滤操作是在模糊匹配之后执行的。是否有办法在此之前运行过滤查询以限制搜索空间?在旧版本中找到filtered
子句,但在新版本中找不到等效子句。
任何其他优化,可以帮助这里也将不胜感激。
1条答案
按热度按时间exdqitrt1#
后置过滤器可以解决您的问题。
举个例子: