假设我有一个字段“epoch_date”,当我进行弹性搜索查询时,它会经常排序。我该如何绘制这个字段?现在,我刚存储:是的。即使此字段不计入相关性评分,我应该将其编入索引吗?如果我打算经常对这个字段进行排序,我应该在这个字段中添加什么,这样会更有效?
{
"tweet" : {
"properties" : {
"epoch_date" : {
"type" : "integer",
"store" : "yes"
}
}
}
}
答案 0 :(得分:4)
在给定映射的情况下,您无需更改任何字段。您只能对字段进行排序,如果它已编入索引,则默认值为"index":"yes"
表示数字或日期。您无法将数字类型设置为analyzed
,因为没有要分析的文字。此外,最好将日期类型用于日期而不是整数。
如果您正在排序的字段具有许多独特的术语,则排序可能会占用内存。只要确保你有足够的内存。此外,请记住,在特定字段上排序会丢弃相关性排名,这是搜索引擎的重要组成部分。
您是否要存储该字段也与排序无关,而只是检索它以便将其与搜索结果一起返回。如果您使用_source
字段(默认行为),则没有理由存储特定字段。如果在查询时使用fields
选项请求特定字段,则直接从lucene检索存储的字段,而不是从解析json的_source
字段中提取。
答案 1 :(得分:0)
索引用于有效排序。是的,您想要为该字段创建索引。
至于要求它“更有效率”,我建议你先检查一下你的结果,看看它们是否足够快。我事先没有看到原因(使用您提供的有限信息)认为它不会有效。
如果您打算在字段上进行过滤(日期范围?),请确保在您认为经常使用过滤器时使用过滤器而不是查询。这是因为可以有效地缓存过滤器。