java - 用于日志记录的 Elasticsearch - 需要架构建议

标签 java elasticsearch

我正在尝试提出一种优化的架构来在 Elasticsearch 上存储事件日志消息。

这是我的规范/需求:

  • 消息是只读的;一旦输入,他们只会被查询以进行报告。
  • 没有自由文本搜索。用户将仅使用过滤器进行报告。
  • 必须能够执行时间戳范围查询。
  • 主要需要按代理客户交互(以及其他字段)进行过滤。
  • 客户代理属于同一位置

因此,最常执行的查询将是:获取给定 client_idcustomer_idtimestamp 的所有 LogItem > 范围。

这是 LogItem 的样子:

"_source": {
    "agent_id" : 14,
    "location_id" : 2,
    "customer_id" : 5289,
    "timestamp" : 1320366520000, //Java Long millis since epoch
    "event_type" : 7,
    "screen_id" : 12
}

我需要帮助为我的数据建立索引。

我一直在阅读what is an elasticsearch index?using elasticsearch to serve events for customers了解一个好的索引架构,但我需要专业人士的帮助。

这是我的问题:

  1. 文章建议创建“每天一个索引”。 如何使用该架构进行范围查询?(例如:是否可以对索引范围进行查询?)

  2. 目前我正在使用一个大索引。 如果我为每个 location_id 创建一个索引,我如何使用分片来进一步组织我的记录?

  3. 鉴于上述规范,您可以建议更好的架构吗?

  4. 我应该使用哪些字段过滤查询

编辑:这是从我的应用程序运行的示例查询:

{
  "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
    }
  }
}

最佳答案

您绝对可以搜索多个索引。例如,您可以使用通配符或逗号分隔的索引列表,但请记住索引名称是字符串,而不是日期。

分片不是用于组织数据,而是用于分发数据并最终横向扩展。如何做到这一点取决于您的数据以及您使用数据的用途。看看这个演讲:http://vimeo.com/44716955 .

关于您关于过滤器 VS 查询的问题,请查看 this其他问题。

关于java - 用于日志记录的 Elasticsearch - 需要架构建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19258185/

相关文章:

java - TagSoup vs. Jsoup vs. HTML Parser vs. HotSax vs

java - 搜索请求生成器 : is there a way to ask to return all fields?

elasticsearch - 使用空白标记器时删除逗号

elasticsearch - 处理Elasticsearch中的重复记录

elasticsearch - Kibana条形图平均按字段汇总

elasticsearch - 使用FSCrawler在Elasticsearch中创建索引

java - 基本Java返回值

java - Log4j2 获取日志记录事件

java - 将 JSONObject 写入文件

java - 如何在OnCreate中自动打开网络?