过滤器,然后在ElasticSearch 8.6.2上查询

f2uvfpb9  于 2023-03-17  发布在  ElasticSearch
关注(0)|答案(1)|浏览(194)

我们正在使用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子句,但在新版本中找不到等效子句。
任何其他优化,可以帮助这里也将不胜感激。

exdqitrt

exdqitrt1#

后置过滤器可以解决您的问题。
举个例子:

GET /shirts/_search
{
  "query": {
    "bool": {
      "filter": {
        "term": { "brand": "gucci" } 
      }
    }
  },
  "aggs": {
    "colors": {
      "terms": { "field": "color" } 
    },
    "color_red": {
      "filter": {
        "term": { "color": "red" } 
      },
      "aggs": {
        "models": {
          "terms": { "field": "model" } 
        }
      }
    }
  },
  "post_filter": { 
    "term": { "color": "red" }
  }
}

相关问题