【发布时间】:2021-05-22 08:11:45
【问题描述】:
我的 Elastic Search 数据库中有一个 created_at 字段,我正在尝试提取数据并按该字段对其进行排序。该字段使用日期格式的映射属性存储,fielddata 键设置为 true,但我仍然收到错误:
文本字段未针对需要按文档字段数据的操作(如聚合和排序)进行优化,因此默认情况下禁用这些操作。请改用关键字字段。或者,在 [created_at] 上设置 fielddata=true 以通过反转倒排索引来加载字段数据。请注意,这会占用大量内存。
一个建议是我可以在我的字段中添加单词keyword 来搜索它,但这似乎告诉我:
created_at 未定义
我正在使用 Javascript,而且我知道您不能只添加(点)字符,所以我已经将它包装起来,但它仍然无法正常工作。 elastic.find 只是我为提取数据而编写的一个函数,如果我删除 sort 数组,它就可以工作。
const results = await elastic.find('my table', {
query: {
range: {
created_at: {
gte: moment(from).format('YYYY-MM-DD HH:MM:SS')
}
}
},
sort: [{
[created_at.keyword]: 'asc' // seems to be undefined
}]
})
为什么我无法访问created_at.keyword?
【问题讨论】:
标签: javascript node.js elasticsearch elasticsearch-query elasticsearch-mapping