2013-07-01 2 views
1

Не уверен, что это ошибка, или что-то упущено. Но термин 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

ответ

1

Это known issue. Обходной путь заключается в использовании одного осколка или запроса дополнительных условий, которые вы собираетесь отображать.

+0

Начиная с версии 0.90.6 вы также можете использовать ['shard_size'] (http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-terms-facet.html#_accuracy_control) , – Sonson123

+0

Это не лучший способ добиться этого. Использование одного осколка может иметь последствия для производительности. – eliasah