【问题标题】:Elastic Search documents sorting, indexing issueElastic Search 文档排序、索引问题
【发布时间】:2012-03-08 16:13:33
【问题描述】:

我的 ElasticSearch 索引中有 9000 个文档。

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

重建索引过程在我的机器上花费了大约 20 分钟。

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

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

我想知道的是:

  1. 有没有一种方法可以通过分析的标记化字段对文档进行排序,而无需重新索引整个文档?

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

【问题讨论】:

  • 至于 1. 对映射的任何更改都需要重新索引。但是,拥有一个分析字段(用于显示/搜索目的或其他)和一个非分析字段(包含相同数据)用于并排排序是完全有效的(并且做了很多次)。也许这回答了我似乎从您的问题中推断出的隐含用例。
  • 使用elasticsearch.org/guide/reference/mapping/multi-field-type.html 可以轻松地将相同的数据映射到多个字段(如上所述),这不需要更改您的客户端代码

标签: lucene elasticsearch


【解决方案1】:

只要字段存储在 _source 中,我很确定您每次搜索时都可以使用脚本创建自定义字段。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多