首页 > 解决方案 > 匹配查询的结构是否影响服务器

问题描述

我正在编写一些代码来生成查询,我想知道是否有任何一种方法可以生成对服务器更友好的查询。

所以这个查询:

{
  "from": 0,
  "size": 10,
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "Text": {
              "query": "Scooby Shaggy corridor",
              "fuzziness": 1,
              "operator": "AND"
            }
          }
        }
      ]
    }
  }
}

逻辑上等价于:

{
  "from": 0,
  "size": 10,
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "Text": {
              "query": "Scooby",
              "fuzziness": 1
            }
          }
        },
        {
          "match": {
            "Text": {
              "query": "Shaggy",
              "fuzziness": 1
            }
          }
        },
        {
          "match": {
            "Text": {
              "query": "corridor",
              "fuzziness": 1
            }
          }
        }
      ]
    }
  }
}

但是服务器更容易处理吗?还是没有区别?

我意识到这是一个微不足道的例子,但它会对更复杂的查询产生影响吗?

如果有人知道 ElasticSearch 在幕后的行为方式可以进行观察,我将不胜感激。

谢谢,

亚当。

标签: elasticsearch

解决方案


Elasticsearch 会将您的多词匹配查询重写为逻辑等价物。请参阅此处了解更多详细信息。

匹配查询是布尔类型。这意味着对提供的文本进行分析,分析过程从提供的文本构造一个布尔查询。

但是您应该保留多词匹配查询并让 elasticsearch 完成这项工作。它更易于维护,并且您可以通过参数控制重写rewrite(请参见此处


推荐阅读