Не уверен, что это ошибка, или что-то упущено. Но термин Facet возвращает неверный подсчет количества терминов.elasticsearch: wrong count in terms facet
У меня есть поле, которое имеет str_tag_analyzer
.
Я хочу получить облако тегов из поля. Я хочу получить 20 лучших тегов вместе со своим счетом (Сколько раз они появлялись).
Территория facet посмотрела решение для этого случая. У меня есть понимание того, что параметр размера в вопросе Faces определяет, сколько тегов будет возвращено.
Когда я запускаю запрос на грань с разным размером, я получаю неожиданный результат. Вот несколько моих запросов и их результат.
запроса 1
curl -XGET 'http://server:9200/stage_profiles/wrapper_0/_search?pretty=1' -d '
{
query : {
"nested" : {
"query" : {
"field" : {
"gsid" : 222
}
},
"path" : "medals"
}
}, from: 0, size: 0
,
facets: {
"tags" : { "terms" : {"field" : "field_val_t", size: 1} }
}
}'
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 3,
"successful" : 3,
"failed" : 0
},
"hits" : {
"total" : 189,
"max_score" : 1.0,
"hits" : [ ]
},
"facets" : {
"tags" : {
"_type" : "terms",
"missing" : 57,
"total" : 331,
"other" : 316,
"terms" : [ {
"term" : "hyderabad",
"count" : 15
} ]
}
}
Запрос 2
curl -XGET 'http://server:9200/stage_profiles/wrapper_0/_search?pretty=1' -d '
{
query : {
"nested" : {
"query" : {
"field" : {
"gsid" : 222
}
},
"path" : "medals"
}
}, from: 0, size: 0
,
facets: {
"tags" : { "terms" : {"field" : "field_val_t", size: 3} }
}
}'
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 3,
"successful" : 3,
"failed" : 0
},
"hits" : {
"total" : 189,
"max_score" : 1.0,
"hits" : [ ]
},
"facets" : {
"tags" : {
"_type" : "terms",
"missing" : 57,
"total" : 331,
"other" : 282,
"terms" : [ {
"term" : "playing",
"count" : 20
}, {
"term" : "hyderabad",
"count" : 15
}, {
"term" : "pune",
"count" : 14
} ]
}
}
}
Запрос 3
curl -XGET 'http://server:9200/stage_profiles/wrapper_0/_search?pretty=1' -d '
{
query : {
"nested" : {
"query" : {
"field" : {
"gsid" : 222
}
},
"path" : "medals"
}
}, from: 0, size: 0
,
facets: {
"tags" : { "terms" : {"field" : "field_val_t", size: 10} }
}
}'
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 3,
"successful" : 3,
"failed" : 0
},
"hits" : {
"total" : 189,
"max_score" : 1.0,
"hits" : [ ]
},
"facets" : {
"tags" : {
"_type" : "terms",
"missing" : 57,
"total" : 331,
"other" : 198,
"terms" : [ {
"term" : "playing",
"count" : 20
}, {
"term" : "hyderabad",
"count" : 19
}, {
"term" : "bangalore",
"count" : 18
}, {
"term" : "pune",
"count" : 16
}, {
"term" : "chennai",
"count" : 16
}, {
"term" : "games",
"count" : 13
}, {
"term" : "testing",
"count" : 11
}, {
"term" : "cricket",
"count" : 9
}, {
"term" : "singing",
"count" : 6
}, {
"term" : "movies",
"count" : 5
} ]
}
}
}
У меня следующие проблемы 1. Первый запрос дает тег с кол-15, но существует еще один тег со счетом 20 (это можно увидеть в запросах 2 и 3). Поэтому он должен вернуть тег «play» со счетом 20. 2. Второй запрос возвращает количество тега «hyderabad» как 15, а третий запрос возвращает значение 19 для одного и того же тега.
Пожалуйста, дайте мне знать, если вам нужна другая информация, такая как сопоставление, данные, присутствующие в ES. Thanks
Начиная с версии 0.90.6 вы также можете использовать ['shard_size'] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-terms-facet.html#_accuracy_control) , – Sonson123
Это не лучший способ добиться этого. Использование одного осколка может иметь последствия для производительности. – eliasah