ElasticSearch:经常排序的字段的映射

时间:2013-05-18 17:21:06

标签: elasticsearch

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

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

2 个答案:

答案 0 :(得分:4)

在给定映射的情况下,您无需更改任何字段。您只能对字段进行排序,如果它已编入索引,则默认值为"index":"yes"表示数字或日期。您无法将数字类型设置为analyzed,因为没有要分析的文字。此外,最好将日期类型用于日期而不是整数。

如果您正在排序的字段具有许多独特的术语,则排序可能会占用内存。只要确保你有足够的内存。此外,请记住,在特定字段上排序会丢弃相关性排名,这是搜索引擎的重要组成部分。

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

答案 1 :(得分:0)

索引用于有效排序。是的,您想要为该字段创建索引。

至于要求它“更有效率”,我建议你先检查一下你的结果,看看它们是否足够快。我事先没有看到原因(使用您提供的有限信息)认为它不会有效。

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