【发布时间】:2022-10-24 05:38:35
【问题描述】:
我有一个弹性搜索字段ID,它是一个数字,但在索引中设置为“文本”。由于要重新加载大量数据,我无法更改索引。
我正在编写一个脚本来执行此排序,但出现“Bad_request”错误。
Script script = new Script(ScriptType.INLINE, "painless", "ctx._source.ID.keyword", Collections.emptyMap());
ScriptSortBuilder.ScriptSortType sortType = ScriptSortBuilder.ScriptSortType.NUMBER;
builder.sort(SortBuilders.scriptSort(script, sortType).order(SortOrder.DESC));
searchRequest.source(builder);
response = restsearchClient.search(searchRequest, RequestOptions.DEFAULT);
我尝试了以下 idorcode 值:doc['ID']、doc['ID.keyword']、ctx._source.ID、ctx._source.ID.keyword。
请指教!
【问题讨论】:
-
如果为 com ID 创建了关键字子字段,您可以检查您的映射吗?如果关键字子字段不存在,我看不到任何其他方法可以使用新映射重新索引索引。
-
是的,创建了 Id.keyword
-
你能显示你的查询吗?我知道您的代码在 java 中,但查看查询的生成方式很重要。既然你说映射有 ID.keyword 这样的排序应该工作:...“sort”:[ {“ID.keyword”:{“order”:“asc”}}]。
标签: sorting elasticsearch search