2012-03-08 93 views
3

我在ElasticSearch指数9000个文档。弹性搜索文件排序,索引问题

我想通过分析字符串字段排序,所以,为了做到这一点,我知道(通过谷歌),我必须更新映射,使字段不被分析,所以我可以按这个字段排序,我必须再次重新索引数据以反映映射的变化。

重新索引过程我的机器上消耗了大约20分钟。

奇怪的是,重新索引过程中消耗约2小时一个非常强大的生产服务器上。

我检查内存状态和服务器上的处理器使用,一切正常。

我想知道的是:

  1. 有没有一种方法,而无需重新索引整个文件通过分析,切分领域对文档进行排序?

  2. 如果我必须重新索引整个文件,那么它为什么需要这么大的时间重新索引服务器上的文件?或如何追踪该服务器上的缓慢原因?

+2

至于1.任何对映射的更改都需要reindex。然而,对于分析领域(用于显示/搜索目的等)和非分析领域(包含相同数据)来并排排列生活,它是完全有效的(并且做了很多很多次)。也许这会回答你隐含的用例,我似乎从你的问题中推断出来。 – 2012-03-09 15:21:49

+2

使用http://www.elasticsearch.org/guide/reference/mapping/multi-field-type.html可以轻松完成对多个字段的相同数据映射(正如我上面所建议的那样),它不需要更改为您的客户端代码 – 2012-03-09 15:24:43

回答

0

只要该字段存储在_source中,我敢肯定你可以使用脚本来创建一个自定义字段,每次你搜索。

{ 
    "query" : { "query_string" : {"query" : "*:*"} }, 
    "sort" : { 
    "_script" : { 
     "script" : "<some sorting field>", 
     "type" : "number", 
     "params" : {}, 
     "order" : "asc" 
    } 
    } 
} 

这有缺点重新评估每次搜索时在服务器端的排序脚本,但我解决它(1)。