首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch排序脚本不能像预期的那样只用于少数文档

Elasticsearch排序脚本不能像预期的那样只用于少数文档
EN

Stack Overflow用户
提问于 2020-11-17 19:33:45
回答 1查看 639关注 0票数 0

考虑这样的查询:

代码语言:javascript
复制
{
  "size": 200, 
  "query": {
     "bool" : {
     ....
     }
   },

   "sort": {
      "_script" : {
        "script" : {
         "source" : "params._source.participants[0].participantEmail",
         "lang" : "painless"
       },
       "type" : "string",
       "order" : "desc"
     }
   }
}

此查询适用于几乎每个文档,因为其中一些文档不在正确的位置。怎么会这样呢?

最后一个文档的顺序如下(我正在显示每个文档的参与者数组的第一项):

代码语言:javascript
复制
shiend@....
denys@...
Lynn@...

这怎么可能呢?我没有方向。排序查询错误吗?

设置:

代码语言:javascript
复制
 "myindex" : {
    "settings" : {
      "index" : {
        "refresh_interval" : "30s",
        "number_of_shards" : "5",
        "provided_name" : "myindex",
        "creation_date" : "1600703588497",
        "analysis" : {
          "filter" : {
            "english_keywords" : {
              "keywords" : [
                "example"
              ],
              "type" : "keyword_marker"
            },
            "english_stemmer" : {
              "type" : "stemmer",
              "language" : "english"
            },
            "synonym" : {
              "type" : "synonym",
              "synonyms_path" : "analysis/UK_US_Sync_2.csv",
              "updateable" : "true"
            },
            "english_possessive_stemmer" : {
              "type" : "stemmer",
              "language" : "possessive_english"
            },
            "english_stop" : {
              "type" : "stop",
              "stopwords" : "_english_"
            },
            "my_katakana_stemmer" : {
              "type" : "kuromoji_stemmer",
              "minimum_length" : "4"
            }
          },
          "normalizer" : {
            "custom_normalizer" : {
              "filter" : [
                "lowercase",
                "asciifolding"
              ],
              "type" : "custom",
              "char_filter" : [ ]
            }
          },
          "analyzer" : {
            "somevar_english" : {
              "filter" : [
                "english_possessive_stemmer",
                "lowercase",
                "english_stop",
                "english_keywords",
                "english_stemmer",
                "asciifolding",
                "synonym"
              ],
              "tokenizer" : "standard"
            },
            "myvar_chinese" : {
              "filter" : [
                "porter_stem"
              ],
              "tokenizer" : "smartcn_tokenizer"
            },
            "myvar" : {
              "filter" : [
                "my_katakana_stemmer"
              ],
              "tokenizer" : "kuromoji_tokenizer"
            }
          }
        },
        "number_of_replicas" : "1",
        "uuid" : "d0LlBVqIQGSk4afEWFD",
        "version" : {
          "created" : "6081099",
          "upgraded" : "6081299"
        }
      }
    }
  }

制图:

代码语言:javascript
复制
{
    "myindex": {
        "mappings": {
            "doc": {
                "dynamic_date_formats": [
                    "yyyy-MM-dd HH:mm:ss.SSS"
                ],
                "properties": {
                    "all_fields": {
                        "type": "text"
                    },
                    "participants": {
                        "type": "nested",
                        "include_in_root": true,
                        "properties": {
                            "participantEmail": {
                                "type": "keyword",
                                "fields": {
                                    "keyword": {
                                        "type": "keyword",
                                        "ignore_above": 256,
                                        "normalizer": "custom_normalizer"
                                    }
                                },
                                "copy_to": [
                                    "all_fields"
                                ]
                            },
                            "participantType": {
                                "type": "text",
                                "fields": {
                                    "keyword": {
                                        "type": "keyword",
                                        "ignore_above": 256,
                                        "normalizer": "custom_normalizer"
                                    }
                                },
                                "copy_to": [
                                    "all_fields"
                                ]
                            }
                        }
                    }
                }
            }
        }
    }
}

编辑:也许是因为电子邮件Lynn@..。从大写开始?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-18 08:07:13

实际上,字符串是按词法顺序排序的,即大写字母先于小写字母(降序则相反)。

你能做的就是将脚本中的所有电子邮件小写:

代码语言:javascript
复制
"sort": {
  "_script" : {
    "script" : {
     "source" : "params._source.participants[0].participantEmail.toLowerCase()",
     "lang" : "painless"
   },
   "type" : "string",
   "order" : "desc"
 }

}

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64882111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档