使用curl 'http://localhost:9200/_cat/indices?v'
使用docs.count
检查Elasticsearch实例中索引的状态时,每个index
中的98160
通常大于搜索所有文档时返回的搜索结果数在那个指数上。
有时它是搜索命中的整数倍,但并非总是如此。在一个案例中,索引中的match_all
但805383
文档有CREATE TRIGGER `update_child_users` BEFORE UPDATE ON `abcd_virtuemart_userinfos`
FOR EACH ROW BEGIN
IF OLD.`primary_user_id` = NEW.`primary_user_id` AND (NEW.`primary_user_id` = 0 OR NEW.`primary_user_id` = '' OR NEW.`primary_user_id` IS NULL)
THEN
CALL sys.`update_child_user`(NEW.`company`, NEW.`last_name`, NEW.`first_name`, NEW.`middle_name`, NEW.`phone_1`, NEW.`phone_2`, NEW.`fax`, NEW.`address_1`, NEW.`address_2`, NEW.`city`, NEW.`virtuemart_state_id`, NEW.`virtuemart_country_id`, NEW.`zip`, NEW.`billing_email_address`, NEW.`virtuemart_user_id`);
END IF;
END
次点击。
请注意,映射中没有嵌套文档。
解释是什么?请注意,搜索似乎正常运行。
答案 0 :(得分:0)
这可能是因为您的数据被分片为多个节点(多节点群集设置)而没有replicas
,并且在您执行搜索查询时,其中一个节点可能已关闭。
例如,
如果我只有一个节点的集群,并且该节点有index
4
documents
,那么当我检查indices
时,我会得到以下输出,
health status index pri rep docs.count docs.deleted store.size pri.store.size
yellow open blog 5 1 4 0 10.9kb 10.9kb
现在,如果我运行match_all
查询,
{
"query": {
"match_all": {}
}
}
我会得到,
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 4,
"max_score": 1,
"hits": [........
注意docs.count
等于hits
计数的方式。在上面的输出中,观察分片的数量,即5
。所有这些分片都分配给一个节点。
但如果我配置了replicas
而不是的多节点设置,那么这些分片将分布在多个节点中。
假设我有一个双节点群集,其中节点1 和节点2 ,共有5个分片,其中5个分片分片0, 1,3 被分配到节点2 ,该节点因维护而关闭或因任何原因无法使用。在这种情况下,您只能通过节点1 获得分片2
和4
。现在,如果您尝试检索或搜索数据,会发生什么? Elasticsearch将为您的幸存节点提供搜索结果,即节点1 。
在这种情况下,点击次数总是小于docs.count
值。
使用 replicas
可以避免这种不确定性答案 1 :(得分:0)
matches all documents, giving them all a _score of 1.0
需要注意的一点是,如果分析了电子邮件字段,则此查询将无法按预期工作,这是Elasticsearch中字段的默认值。在这种情况下,电子邮件字段将分为三个部分:joe,blogs和com。这意味着它将匹配任何三个条款的搜索和文档。 link