3

假设我有一个字段“epoch_date”,当我进行弹性搜索查询时,它会经常被排序。我应该如何映射这个字段?现在,我刚刚存储了:是的。即使该字段不计入相关性评分,我是否应该对其进行索引?如果我打算经常对这个字段进行排序,我应该在这个字段中添加什么,这样会更有效率?

{
    "tweet" : {
        "properties" : {
            "epoch_date" : {
                "type" : "integer",
                "store" : "yes"
            }
        }
    }
}
4

2 回答 2

4

给定映射,您无需更改任何内容即可对字段进行排序。您只能对已编入索引的字段进行排序,默认值为"index":"yes"数字或日期。您不能将数字类型设置为analyzed,因为没有要分析的文本。此外,最好将日期类型用于日期而不是整数。

如果您要排序的字段有很多独特的术语,那么排序可能会占用大量内存。只要确保你有足够的内存就可以了。另外,请记住,对特定字段进行排序会丢弃相关性排名,而相关性排名是搜索引擎的重要组成部分。

您是否也想存储该字段与排序无关,而与您检索它的方式有关,以便将其与搜索结果一起返回。如果您使用该_source字段(默认行为),则没有理由存储特定字段。如果fields在查询时使用该选项请求特定字段,则存储的字段将直接从 lucene 中检索,而不是从_source解析 json 的字段中提取。

于 2013-05-19T10:40:43.650 回答
0

索引用于高效排序。所以是的,您想为该字段创建索引。

至于需要它“更高效”,我建议你先检查你的结果,看看它们是否足够快。我事先没有看到任何理由(您提供的信息有限)认为它不会有效。

如果您还打算对字段进行过滤(日期范围?),请确保在您认为经常使用的过滤器时使用过滤器而不是查询。这是因为过滤器可以被有效地缓存。

于 2013-05-18T18:35:51.733 回答