当分数不相关时,使用 Filter Bool Query 作为 AND 运算符

问题描述 投票:0回答:1

我的数据仅包含关键字或数字。没有全文字段。 我的搜索查询应该支持:完全匹配并包含查询。

我的问题是:如果我不关心分数,并且总是一个 YES 或 NO 的问题,我是否可以始终使用 Filter bool 查询而不是 Must bool 查询来创建 AND 条件以提高性能?

例如:

query = ( myId=12345 AND sream="aaa" AND 名称包含“ABC”)

GET indexName/_search
{
  "query":
  {
    "bool":
    {
      "filter":
      [
        {
          "term": {
            "myId": {
              "value": "12345",
              "boost": 1
            }
          }
        },
        {
          "term": {
            "stream": {
              "value": "aaa",
              "boost": 1
            }
          }
        },
         {
            "wildcard" : {
                  "name" : {
                    "wildcard" : "*abc*",
                    "boost" : 1.0
                  }
                }
          }
      ]
 
    }
  },
     "sort" : [
      {"_instance" : {"order" : "asc"}}
   ]
}
elasticsearch
1个回答
0
投票

是的,你成功了!如果您只对精确搜索感兴趣,则不会进行任何全文搜索,因此对评分不感兴趣,

bool/filter
就是正确的选择!!

但请注意,带有前导通配符的

wildcard
查询会降低性能。根据您运行此查询的数据量,过滤器与必须在某种程度上可能根本没有区别。您应该考虑采取不同的做法。

© www.soinside.com 2019 - 2024. All rights reserved.