【问题标题】:Spring Elasticsearch sorting by field with whitespaceSpring Elasticsearch 按带空格的字段排序
【发布时间】:2021-05-20 13:00:16
【问题描述】:

我需要按一些字段对我的文档进行排序,一种排序 - 一个字段。但每次我都弄错了排序。在文档中,我有 uid 和标题。文档中的 Uid 看起来像“AAA-100”,标题可能只是带有空格的文本。当我试图按这些字段排序时,我得到了错误的顺序。例如,当我尝试按 ASC 顺序按标题排序时,我得到了这个:

aaa b c
aaa c
aaa b d
aaa b h
bbb f b
test

当order为DESC时

test
aaa b h
bbb f b
aaa b d
aaa b c
aaa c

对于 uid ASC 顺序看起来不错,但 DESC 看起来像

AAA-461
AAA-460
AAA-449
AAA-450
AAA-454

这是我的文档的实体类中的字段:

@MultiField(mainField = @Field(type = FieldType.String, analyzer = INDEX_ANALYZER, searchAnalyzer = SEARCH_ANALYZER), otherFields =
@InnerField(suffix = "raw", type = FieldType.String, index = not_analyzed))
private String uid;

@MultiField(mainField = @Field(type = FieldType.String, analyzer = INDEX_ANALYZER, searchAnalyzer = SEARCH_ANALYZER), otherFields = 
@InnerField(suffix = "raw", type = FieldType.String, index = not_analyzed))
private String title;

其中 INDEX_ANALYZER 和 SEARCH_ANALYZER:

    "custom_search_analyzer": {
      "filter": [
        "lowercase",
        "asciifolding"
      ],
      "tokenizer": "keyword"
    },
    "custom_index_analyzer": {
      "filter": [
        "lowercase",
        "asciifolding",
        "custom_nGram"
      ],
      "tokenizer": "keyword"
    }

怎么了?为什么排序不能正常工作?

【问题讨论】:

    标签: java elasticsearch spring-data


    【解决方案1】:

    只需创建一个用于排序的字段、新映射并为要排序的字段设置类型“关键字”。好像

    .startObject("field's name")
        .field("type", "keyword")
    .endObject()
    

    不要在字段排序上设置其他类型。它可能是错误的排序结果。我在越南语字符串上使用这种方式,仍然获得成功。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      • 2021-01-30
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多