我的 flex 字段名称中的数据为“Amit 111”,“amit 111”,“Amit 222”。

我正在尝试使用以下方法对其进行排序:

   searchSourceBuilder.query(query).sort("name.keyword", SortOrder.ASC)

它返回结果为:
“Amit 111”,“Amit 222”,“Amit 111”

但我希望结果为:
“Amit 111”,“Amit 111”,“Amit 222”

请帮忙。

最佳答案

另一种方法是使用fielddata作为text字段,您可以在链接的URL上应用排序和更多详细信息。

需要为其更改Java代码之后显示的索引映射的Java代码。

searchSourceBuilder.query(query).sort("name", SortOrder.ASC)

创建在name字段上启用了字段数据的索引
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "fielddata": true
        }
      }
    }
  }

索引示例文件
{
  "name" : "amit 111"
}

{
  "name" : "Amit 111"
}

{
  "name" : "Amit 222"
}

您在name字段上排序的搜索查询
{
    "sort": [
        {
            "name": "asc"
        }
    ]
}

结果
 "hits": [
      {
        "_index": "key",
        "_type": "_doc",
        "_id": "1",
        "_score": null,
        "_source": {
          "name": "amit 111"
        },
        "sort": [
          "111"
        ]
      },
      {
        "_index": "key",
        "_type": "_doc",
        "_id": "2",
        "_score": null,
        "_source": {
          "name": "Amit 111"
        },
        "sort": [
          "111"
        ]
      },
      {
        "_index": "key",
        "_type": "_doc",
        "_id": "3",
        "_score": null,
        "_source": {
          "name": "Amit 222"
        },
        "sort": [
          "222"
        ]
      }
    ]

10-08 02:53