Lucene 弹性搜索文档排序、索引问题
我的ElasticSearch索引中有9000个文档 我想按分析过的字符串字段排序,因此,为了做到这一点,我知道(通过谷歌)我必须更新映射以使字段不被分析,这样我就可以按此字段排序,并且我必须重新索引数据以反映映射中的变化 重新编制索引的过程在我的机器上花费了大约20分钟 奇怪的是,在一台功能强大的生产服务器上,重新编制索引的过程耗时约2小时 我检查了服务器上的内存状态和处理器使用情况,一切正常 我想知道的是:Lucene 弹性搜索文档排序、索引问题,lucene,elasticsearch,Lucene,elasticsearch,我的ElasticSearch索引中有9000个文档 我想按分析过的字符串字段排序,因此,为了做到这一点,我知道(通过谷歌)我必须更新映射以使字段不被分析,这样我就可以按此字段排序,并且我必须重新索引数据以反映映射中的变化 重新编制索引的过程在我的机器上花费了大约20分钟 奇怪的是,在一台功能强大的生产服务器上,重新编制索引的过程耗时约2小时 我检查了服务器上的内存状态和处理器使用情况,一切正常 我想知道的是: 是否有一种方法可以按已分析的标记化字段对文档进行排序,而无需对整个文档重新编制索引
只要字段存储在_source中,我很确定每次搜索时都可以使用脚本创建自定义字段
{
"query" : { "query_string" : {"query" : "*:*"} },
"sort" : {
"_script" : {
"script" : "<some sorting field>",
"type" : "number",
"params" : {},
"order" : "asc"
}
}
}
{
“查询”:{“查询字符串”:{“查询”:“*:*”},
“排序”:{
“_脚本”:{
“脚本”:“,
“类型”:“编号”,
“参数”:{},
“订单”:“asc”
}
}
}
这样做的缺点是每次搜索时都要在服务器端重新评估排序脚本,但我认为它可以解决(1)。至于1。对映射的任何更改都需要重新索引。然而,有一个经过分析的字段(用于显示/搜索或其他目的)和一个未经分析的字段(包含相同的数据)并排排序是完全有效的(而且做了很多很多次)。也许这回答了我似乎从你的问题中推断出的你的隐含用例。使用相同的数据映射到多个字段(如我上面所建议的)可以很容易地完成,而不需要更改你的客户端代码