我正在尝试提出一个优化的架构来在 Elasticsearch 上存储事件日志消息。
这是我的规格/需求:
- 消息是只读的;一旦输入,它们只会被查询以进行报告。
- 没有自由文本搜索。用户将仅使用过滤器进行报告。
- 必须能够进行
timestamp
范围查询。 - 主要需要过滤
agent
和customer
交互(除了其他字段)。 customers
和agents
属于同一个location
。
所以最常执行的查询是:get all LogItem
s given client_id
, customer_id
, and timestamp
range。
这是 a 的LogItem
样子:
"_source": {
"agent_id" : 14,
"location_id" : 2,
"customer_id" : 5289,
"timestamp" : 1320366520000, //Java Long millis since epoch
"event_type" : 7,
"screen_id" : 12
}
我需要帮助索引我的数据。
我一直在阅读什么是弹性搜索索引?并使用弹性搜索为客户提供事件以了解良好的索引架构,但我需要专业人士的帮助。
所以这是我的问题:
文章建议创建“每天一个索引”。我将如何使用该架构进行范围查询?(例如:是否可以查询索引范围?)
目前我正在使用一个大索引。如果我为每个 location_id 创建一个索引,我如何使用分片来进一步组织我的记录?
鉴于上述规格,您可以建议更好的架构吗?
我应该使用 vs查询过滤哪些字段?
编辑:这是从我的应用程序运行的示例查询:
{
"query" : {
"bool" : {
"must" : [ {
"term" : {
"agent_id" : 6
}
}, {
"range" : {
"timestamp" : {
"from" : 1380610800000,
"to" : 1381301940000,
"include_lower" : true,
"include_upper" : true
}
}
}, {
"terms" : {
"event_type" : [ 4, 7, 11 ]
}
} ]
}
},
"filter" : {
"term" : {
"customer_id" : 56241
}
}
}