ES版本2.1.2 我使用NativeScript按术语值过滤文档。该脚本基于从文档中查找术语值返回true / false。 Elasticsearch返回的结果数量在同一查询中稳步增长,直到达到实际计数。我不确定是否因为fielddata逐步缓存。重新启动ES时总会发生这种情况。如果脚本查询被替换为术语查询,则结果在第一次搜索中是准确的。我还注意到我的自定义脚本多次初始化,并且每个搜索请求的数量都不同。这有什么不对?
我在单个节点中运行ES,有3个分片和0个副本。对于第一个查询,本机脚本初始化6次。对于同一查询,初始化次数增加到第二次的某个地方18,并且第三次达到22。对于后续搜索,它会保持22次。随着Native Script的初始化次数增加,我得到了更多相同查询的结果,当它达到最终计数时,返回实际的搜索结果数。无法理解同一查询的搜索结果总数不一致。
答案 0 :(得分:0)
发现了这个问题。搜索超时设置为500毫秒,在第一次查询期间(在弹跳ES之后),ES尝试从所有活动段加载内存中的fielddata。由于fielddata的初始填充花费的时间超过了超时阈值,因此某些段的fielddata未加载到记忆。在后续搜索期间,fielddata完全加载,因此在几次搜索后看到实际计数。 将超时增加到5秒可以有足够的时间从所有段加载fielddata,从而在第一次搜索中获得实际的总计数。