我在 Elasticsearch 中有 CDR 日志條目,格式如下。創建此檔案時,我不會有有關 delivery_status 欄位的資訊。
{
msgId: "384573847",
msgText: "Message text to be delivered"
submit_status: true,
...
delivery_status: //comes later
}
稍后當交貨狀態可用時,我可以更新此記錄。
但是我已經看到更新查詢降低了攝取率。使用批量操作的純插入,我可以達到 3000 或更多事務/秒,但如果我結合更新,攝取速率變得非常慢,并且以 100 或更少的 txns/秒爬行。
所以,我想我可以創建另一個索引,如下所示,我將交付狀態與 msgId 一起存盤:
{
msgId:384573847,
delivery_status: 0
}
通過這種方法,我最終得到了 2 個索引(類似于 RDBMS 中的主從表)。有沒有辦法通過加入這些索引來查詢記錄?我聽說過別名,但不能完全理解它的概念以及它是否可以應用于我的用例。
感謝任何幫助我提出建議的人。
uj5u.com熱心網友回復:
正如您所提到的,您可以在單獨的索引中索引檔案并使用Elasticsearch 的折??疊功能并檢索這兩個檔案。
讓我們考慮一下,您有索引檔案,index2并且index3兩者都有共同點msgId,那么您可以使用以下查詢:
POST index2,index3/_search
{
"query": {
"match_all": {}
},
"collapse": {
"field": "msgId",
"inner_hits": {
"name": "most_recent",
"size": 5
}
}
}
但同樣,您需要考慮大資料集的查詢性能。您可以對 Evalue 查詢性能進行一些基準測驗,并確定索引或查詢時間會更好。
關于別名,目前在上述查詢中,我們提供index2,index3索引名稱。(逗號分隔)。但是如果您使用別名,那么您可以使用單個統一名稱來查詢兩個索引。
您可以使用以下命令將索引添加到單個別名:
POST _aliases
{
"actions": [
{
"add": {
"index": "index3",
"alias": "order"
}
},
{
"add": {
"index": "index2",
"alias": "order"
}
}
]
}
現在您可以使用以下查詢,其中包含索引名稱的別名:
POST order/_search
{
"query": {
"match_all": {}
},
"collapse": {
"field": "msgId",
"inner_hits": {
"name": "most_recent",
"size": 5
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/489608.html
標籤:弹性搜索
上一篇:如何在具有精確搜索的彈性中撰寫“select*fromuserswhereusername='kuldeep'and(status='active'ORstat
