python - Kibana 的索引管理不会更新文档计数
问题描述
我开始使用 elasticsearch-dsl 使用 elasticsearch 和 kibana。我正在关注本指南:https ://elasticsearch-dsl.readthedocs.io/en/latest/index.html#persistence-example
一切似乎都很好。但是,在 Kibana 的索引管理面板中刷新统计信息时,文档计数在我执行搜索之前不会更新(可能是巧合,但我对此表示怀疑)。
这是我插入弹性的代码:
connections.create_connection(hosts=['localhost'])
for index, doc in df.iterrows():
new_cluster = Cluster(meta={'id': doc.url_hashed},
title = doc.title,
cluster = doc.cluster,
url = doc.url,
paper = doc.paper,
published = doc.published,
entered = datetime.datetime.now()
)
new_cluster.save()
其中“cluster”是定义我的索引结构的自定义类:
from datetime import datetime
from elasticsearch_dsl import Document, Date, Integer, Keyword, Text
from elasticsearch_dsl.connections import connections
class Cluster(Document):
title = Text(analyzer='standard', fields={'raw': Keyword()})
cluster = Integer()
url = Text()
paper = Text()
published = Date()
entered = Date()
class Index:
name = 'cluster'
def save(self, ** kwargs):
return super(Cluster, self).save(** kwargs)
这是我正在查看的面板:https : //www.screencast.com/t/zpEhv66Np 运行上面的“for”循环并单击 Kibana 上的“重新加载索引”按钮后,数字保持不变。他们只会改变我在我的脚本上执行搜索(仅用于测试):
s2 = Search(using=client, index="cluster")
test_df = pd.DataFrame(d.to_dict() for d in s2.scan())
为什么会这样?非常感谢!
解决方案
首先,您有 1 个节点(可能是主节点和数据),并且在索引管理中它说您的索引状态是yellow
这意味着未分配副本分片(如果您只有 1 个节点,则不能拥有副本,因为副本意味着将这些主分片放在另一个节点上。如果你想要 1 个副本,你需要至少有 2 个数据节点)。您需要将索引的副本设置为 0 以使集群再次处于绿色状态:
PUT /<YOUR_INDEX>/_settings
{
"index" : {
"number_of_replicas" : 0
}
}
至于索引计数,在批量操作之后需要flush
将文档写入磁盘。来自文档:
刷新索引是确保当前仅存储在事务日志中的任何数据也永久存储在 Lucene 索引中的过程。重启时,Elasticsearch 会将事务日志中的所有未刷新操作重播到 Lucene 索引中,以使其恢复到重启前的状态。Elasticsearch 会根据需要自动触发刷新,使用启发式算法来权衡未刷新事务日志的大小与执行每次刷新的成本。
一旦每个操作被刷新,它就会永久存储在 Lucene 索引中。
基本上,当您批量处理 N 个文档时,您不会立即看到它们,因为它们尚未写入 Lucene 索引。flush
操作完成后可以手动触发bulk
:
POST /<YOUR_INDEX>/_flush
然后检查索引中的文档数量:
GET _cat/indices?v&s=index
您还可以强制每 N 秒刷新一次,例如:
PUT /<YOUR_INDEX>/_settings
{
"index" : {
"refresh_interval" : "1s"
}
}
您可以在docs中阅读有关它的更多信息,但我的建议是,如果文档数量与您批量处理的文档数量相同,请不要担心它,并且使用Kibana dev tools
而不是index management
GUI。
推荐阅读
- ruby - 在 ruby 中使用检查访问嵌套属性
- ios - 函数调用的参数太多,预期为 0,有 2
- android - 如何修复Android中缩放画布的错误坐标
- visual-studio-code - 为什么我的 vscode 1.38.1 在 Ubuntu 19 上打开 .NET Core 3.0 裸控制台应用程序时显示“未定义或导入的预定义类型”
- javascript - Angular Router (Routing) - 取消导航到不同的路由 (url)
- anylogic - 不同代理类型的标准网络
- reactjs - 如何让我的 flatList 将具有嵌套对象的 Array 对象作为 useState 的属性呈现?
- python - 为 3 类训练 CNN,但一般类为 4
- r - 在 R 中的多列组合上过滤数据框
- java - Eclipse 使用 Tab 按钮在方法参数之间浏览/导航