Elasticsearch6.X重量除去

1518 ワード

1、題記
Elasticsearchはmysqlのようなdistinctの重み付け機能がありますか?
1)どのようにして再カウントしますか?類似mysql:select distinct(count(1))from my_table;2)デリバリー結果の取得方法.類似mysql:SELECT DISTINCT name,age FROM users;
2、需要
1)ESの検索結果をデクリメントしてカウントする.2)ESの検索結果をリセットして表示
3、分析
1)統計的カウントはES重合機能とcardinalityを組み合わせて実現する必要がある.2)結果を再表示するには、2つの方法があります.1つは、フィールド集約+top_を使用することです.hots重合方式.方法2:collapse折り畳み機能を使用します.
4、DSLソース
1)重量除去数を統計する.
GET books/_search
{
"size":0,
"aggs" : {
"books_count" : {
"cardinality" : {
"field" : "title.keyword"
}
}
}
}

2)重複除外内容を返す
方法一:top_hits重合
GET books/_search
{
"query": {
"match_all": {}
},
"aggs": {
"type": {
"terms": {
"field": "title.keyword",
"size": 10
},
"aggs": {
"title_top": {
"top_hits": {
"_source": {
"includes": ["title"]
},
"sort": [
{
"title.keyword": {
"order": "desc"
}
}
],
"size":1
}
}
}
}
},
"size": 0
}

方式二:折りたたみ
GET books/_search
{
"query": {
"match_all":{}
},
"collapse": {
"field": "title.keyword"
}
}

方式二比較方式一:1)簡略化;2)aggsの実装よりも性能が優れている.詳細については、以下を参照してください.http://t.cn/RmafXMJ
5、注意事項&まとめ
1、折りたたみ機能ES 5.3バージョン以降にリリースされます.2、集約&折り畳みはkeywordタイプに対してのみ有効である.3、思想が傾斜しない限り、方案はいつも問題より多い!
参照先:https://elasticsearch.cn/article/132