1
我需要爲用戶和文章建模網站,其中每個用戶可以用任何文章多次交互(讀取,打開e.t.c)。我想通過以下嵌套映射到一個elasticsearch指數這個數據模型:索引文件的通過嵌套字段值聚合彈性搜索索引
{
"mappings": {
"user": {
"properties": {
"user_id": {"type": "string"},
"interactions": {
"type": "nested",
"properties": {
"article_id": {"type": "string"},
"interact_date": {"type": "date"}
}
}
}
}
}
}
例如:
{
"user_id": 20,
"interactions": [
{"article_id": "111", "interact_date": "2015-01-01"},
{"article_id": "111", "interact_date": "2015-01-02"},
{"article_id": "222", "interact_date": "2015-01-01"}
]
}
我需要做的數據可以聚合:
每天的互動總數,通過嵌套聚合完成:
GET /_search { "size": 0, "aggs": { "by_date": { "nested": { "path": "interactions" }, "aggs": { "m_date": {"terms": {"field": "interactions.interact_date"}} } } } }
每天唯一用戶交互次數。如果特定用戶與同一日期範圍內的多篇文章進行交互,則用戶應只計算一次。 Postgres裏很簡單的查詢: 與3列的表[USER_ID,article_id的,interact_date]
SELECT dt, count(uid) FROM (SELECT interact_date::TIMESTAMP::DATE dt, user_id uid FROM interactions GROUP BY interact_date::TIMESTAMP::DATE, user_id) by_date GROUP BY dt;
我如何可以做同樣的elasticsearch指數?
如何通過_update添加交互而不重新索引整個文檔?
- 如何按特定文章過濾用戶 - 僅在與某個指定文章互動時按聚合日期統計用戶一次?
謝謝
謝謝@AndreiStefan。關於重新索引,我的意思是如果可以通過「安全」更新操作添加新的交互,只添加它的迭代仍然不存在。取而代之的是獲取文檔,在客戶端進行更新並放回原處。我有很多線程爲同一用戶更新交互,並希望在沒有分佈式鎖的情況下更新文檔。 – Hersh
使用版本(https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html)進行更新。 –