加载样本数据

贡献者 : 片刻那伊抹微笑ApacheCNApache中文网

本节中的教程依赖以下数据集 :

  • 莎士比亚全集,适当解析成多个字段。下载此数据,点击这里 : shakespeare.json
  • 一组虚构的账户,随机生成的数据。下载此数据,点击这里 : accounts.zip
  • 一组随机生成的日志文件。下载此数据,点击这里 : logs.jsonl.gz

数据集的两个被压缩。使用下面的命令来解压缩文件 :

  1. unzip accounts.zip
  2. gunzip logs.jsonl.gz

Shakespeare(莎士比亚)数据集以下列 schema(模式)进行组织 :

  1. {
  2. "line_id": INT,
  3. "play_name": "String",
  4. "speech_number": INT,
  5. "line_number": "String",
  6. "speaker": "String",
  7. "text_entry": "String",
  8. }

accounts(帐户)数据集以下列 schema(模式)进行组织 :

  1. {
  2. "account_number": INT,
  3. "balance": INT,
  4. "firstname": "String",
  5. "lastname": "String",
  6. "age": INT,
  7. "gender": "M or F",
  8. "address": "String",
  9. "employer": "String",
  10. "email": "String",
  11. "city": "String",
  12. "state": "String"
  13. }

对于日志数据集的方案有几十个不同的 fields,但在本教程中使用更多的是 :

  1. {
  2. "memory": INT,
  3. "geo.coordinates": "geo_point"
  4. "@timestamp": "date"
  5. }

在此之前,我们加载莎士比亚数据集,我们需要建立一个映射的字段。映射划分的文件索引成逻辑组,并指定一个 field 的特征,如该领域的搜索性或是否它的标记化,或分解成单独的词。

使用以下命令来为莎士比亚数据集设置 mapping(映射):

  1. curl -XPUT http://localhost:9200/shakespeare -d '
  2. {
  3. "mappings" : {
  4. "_default_" : {
  5. "properties" : {
  6. "speaker" : {"type": "string", "index" : "not_analyzed" },
  7. "play_name" : {"type": "string", "index" : "not_analyzed" },
  8. "line_id" : { "type" : "integer" },
  9. "speech_number" : { "type" : "integer" }
  10. }
  11. }
  12. }
  13. }
  14. ';

mapping(映射)指定了数据集下列特质 :

  1. speaker 字段是不分析的字符串。在这个 filed(字段)中的字符串被视为一个单独的单元,即使在这个 fileld(字段)中有多个单词。
  2. 这同样适用于 play_name 字段。
  3. line_idspeech_number 字段是整数。

日志数据集需要映射,通过将 geo_point类型应用于这些字段,将日志中的 latitude(纬度)/longitude(纬度)对标记为地理位置。

使用以下命令建立日志 geo_point mappig(映射):

  1. curl -XPUT http://localhost:9200/logstash-2015.05.18 -d '
  2. {
  3. "mappings": {
  4. "log": {
  5. "properties": {
  6. "geo": {
  7. "properties": {
  8. "coordinates": {
  9. "type": "geo_point"
  10. }
  11. }
  12. }
  13. }
  14. }
  15. }
  16. }
  17. ';
  18. curl -XPUT http://localhost:9200/logstash-2015.05.19 -d '
  19. {
  20. "mappings": {
  21. "log": {
  22. "properties": {
  23. "geo": {
  24. "properties": {
  25. "coordinates": {
  26. "type": "geo_point"
  27. }
  28. }
  29. }
  30. }
  31. }
  32. }
  33. }
  34. ';
  35. curl -XPUT http://localhost:9200/logstash-2015.05.20 -d '
  36. {
  37. "mappings": {
  38. "log": {
  39. "properties": {
  40. "geo": {
  41. "properties": {
  42. "coordinates": {
  43. "type": "geo_point"
  44. }
  45. }
  46. }
  47. }
  48. }
  49. }
  50. }
  51. ';

accounts(账目)数据集不需要任何 mapping(映射),所以在这一点上,我们已经准备好使用 Elasticsearch bulk API 加载数据集,使用以下命令 :

  1. curl -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary @accounts.json
  2. curl -XPOST 'localhost:9200/shakespeare/_bulk?pretty' --data-binary @shakespeare.json
  3. curl -XPOST 'localhost:9200/_bulk?pretty' --data-binary @logs.jsonl

这些命令可能需要一些时间来执行,这取决于可用的计算资源。

验证成功加载使用下面的命令 :

  1. curl 'localhost:9200/_cat/indices?v'

您应该看到类似以下的输出 :

  1. index pri rep docs.count docs.deleted store.size pri.store.size
  2. yellow open bank 5 1 1000 0 418.2kb 418.2kb
  3. yellow open shakespeare 5 1 111396 0 17.6mb 17.6mb
  4. yellow open logstash-2015.05.18 5 1 4631 0 15.6mb 15.6mb
  5. yellow open logstash-2015.05.19 5 1 4624 0 15.7mb 15.7mb
  6. yellow open logstash-2015.05.20 5 1 4750 0 16.4mb 16.4mb