基于关键字的排序与基于小写 Normaliser 的排序 - 哪个更好,为什么?

问题描述

我试图了解尝试按关键字排序和按小写规范器排序时的性能差异。 我在 stackoverflow 上遇到了这个答案 - ElasticSearch normalizer performance impact

我知道分析器逻辑将在索引和查询时应用,但有没有办法衡量差异?

以下是我的索引模板:

"test_template": {
    "order": 0,"index_patterns": [
      "test*"
    ],"settings": {
      "index": {
        "analysis": {
          "normalizer": {
            "lowercase_normalizer": {
              "filter": [
                "lowercase"
              ],"type": "custom"
            }
          }
        },"number_of_shards": "6","number_of_replicas": "3"
      }
    },"mappings": {
      "Metadata": {
        "properties": {
          "Field1": {
            "type": "text","fields": {
              "keyword": {
                "type": "keyword","ignore_above": 256
              },"lowercase": {
                "type": "keyword","normalizer": "lowercase_normalizer"
              }
            }
          },"First2": {
            "type": "text","normalizer": "lowercase_normalizer"
              }
            }
          }
        }
      },"aliases": {}
  }

以下是我用来理解差异的排序查询

  1. 基于关键字
GET test_dev/_search 
{ 
  "sort" : [ 
    { 
      "Field1.keyword" : 
        {
          "order" : "desc"
        }
    } 
  ],"size": 1000
}

以上查询返回:

{
  "took": 51,"timed_out": false,"_shards": {
    "total": 6,"successful": 6,"skipped": 0,"Failed": 0
  },"hits": {
    "total": 839049,"max_score": null,"hits": [
      { ...... (results)

  1. 基于小写规范化器:
GET test_dev/_search 
{ 
  "sort" : [ 
    { 
      "Field2.lowercase" : 
        {
          "order" : "desc"
        }
    } 
  ],"size": 1000
}

结果:

{
  "took": 292,......(records)

我认为 "took": (value) 将能够显示差异,因为分析器逻辑也将在查询期间应用,但似乎数字一直在变化,有时 keyword 需要更长的时间排序而不是 lowercase_normaliser 排序。

谁能解释为什么基于关键字的排序比lowercase_normaliser排序更有效?我也看出区别了吗?

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)