Elasticsearch排序是在索引分析(扫描)之后还是之前进行的?

时间:2018-12-10 13:50:19

标签: sorting elasticsearch lucene

我正在使用Elasticsearch 6.2,并且我有一些查询可以分析大量文档。我正在对索引内的一个字段进行排序。 Elasticsearch检查10.000个文档(默认配置值),然后将它们分页返回。

我试图阅读文档,但是如果数据库在从索引对文档进行分析的过程之前或之后进行排序,则找不到任何信息。

换句话说,排序是在索引分析过程中直接应用还是文档一旦分析就排序?如果最后一个选项正确,那么在扫描过程中哪种类型适用Elasticsearch?

非常感谢。

1 个答案:

答案 0 :(得分:0)

  

排序,汇总和访问脚本中的字段值需要   不同的数据访问模式。而不是查找术语和   查找文档,我们需要能够查找文档并找到   它在字段中使用的术语。

Elasticsearch参考文档中的这句话对我意味着,排序是在非分析级别上进行的,但是我还决定仔细检查并对其进行一些测试。

在Elasticsearch中,我们可以对未分析的字段进行排序-例如关键字。这些字段使用doc值进行排序,测试后我可以说它使用预先分析的值根据表示字符(数字,大写字母,小写字母)的代码进行排序< / p>

还可以对 text 字段进行一些警告和调整(例如,需要启用 fielddata ,因为文本字段不支持 doc_values < / strong>)

在这种情况下,文档根据分析的值进行排序。当然,很大程度上取决于分析管道,因为它可以对文本进行各种处理。另外,提醒一下:

  

Fielddata会占用很多堆空间,尤其是在加载时   高基数文本字段。将字段数据加载到   堆,它在该段的生命周期内一直保持在那里。另外,加载   fielddata是一个昂贵的过程,可能导致用户体验   延迟点击。这就是默认情况下禁用字段数据的原因。