非常简单的问题。 我有一个带有文本字段的 ElasticSearch 索引。如何获取该字段索引的所有单词的列表?有什么简单的方法吗?
我正在使用 python 和
elasticsearch
库工作。
获取索引的所有索引词在时间上是昂贵的 和资源,特别是当唯一术语的数量很大时。所以 请在生产集群上使用时小心。
为此,Elasticsearch 首先需要将所有单词加载到内存中,默认情况下对于文本字段禁用此功能(有关更多信息,请参阅FieldData 映射参数)。
假设您的索引上启用了字段数据,您可以使用以下搜索查询获取唯一术语列表,并按其频率排序:
{
"size": 0,
"aggs": {
"indexed_terms": {
"terms": {
"field": "field_name",
"size": 10000 (1)
}
}
}
}
除非启用fieldData,否则你会遇到如下错误:
文本字段未针对需要的操作进行优化 每个文档的字段数据,例如聚合和排序,所以这些 默认情况下禁用操作。请使用关键字字段 反而。或者,在您的字段上设置 fielddata=true 以便 通过反转倒排索引来加载字段数据。请注意,这可以 使用大量内存。
如果您只需要获取单个文档的索引术语列表,您可以简单地使用 _termsvector API,而无需再启用字段数据。