如何在elasticsearch中使用映射?

How to use mapping in elasticsearch?

用 logstash 处理日志后,我所有的字段都具有相同的类型“STRING”,所以我想在 elasticsearch 中使用映射来更改某些类型,如 ip、端口等。但我不知道该怎么做,我是 ElasticSearch 的超级初学者..

有什么帮助吗?

首先要做的是在 Elasticsearch 中安装 Marvel 插件。它允许您非常轻松地使用 Elasticsearch REST API - 索引文档、修改映射等

转到 Elasticsearch 文件夹和 运行:

bin/plugin -i elasticsearch/marvel/latest

然后去http://localhost:9200/_plugin/marvel/sense/index.html to access Marvel Sense from which you can send commands. Marvel itself provides you with a dashboard about Elasticsearch indices, performance stats, etc.: http://localhost:9200/_plugin/marvel/

从某种意义上说,你可以运行:

GET /_cat/indices

了解您的 Elasticsearch 实例中存在哪些索引。

假设有一个名为 logstash 的索引。

你可以通过 运行ning 查看它的映射:

GET /logstash/_mapping

Elasticsearch 将 return 一个描述索引映射的 JSON 文档。它可能是这样的:

{
   "logstash": {
      "mappings": {
         "doc": {
            "properties": {
               "Foo": {
                  "properties": {
                     "x": {
                        "type": "String"
                     },
                     "y": {
                        "type": "String"
                     }
                  }
               }
            }
         }
      }
   }
}

...在这种情况下,doc 是索引文档的文档类型(集合)。在 Sense 中,您可以按如下方式索引文档:

PUT logstash/doc/1
{
  "Foo": {
    "x":"500",
    "y":"200"
  }
}

...这是一个命令,用于索引 ID 1 下的 JSON 对象。

一旦文档字段如Foo.x的类型为字符串,就无法将其更改为数字。您必须先设置映射,然后重新索引。

先删除索引:

DELETE logstash

然后创建索引并设置映射如下:

PUT logstash
PUT logstash/doc/_mapping
{
   "doc": {
      "properties": {
         "Foo": {
            "properties": {
               "x": {
                  "type": "long"
               },
               "y": {
                  "type": "long"
               }
            }
         }
      }
   }
}

现在,即使您将文档的属性作为 JSON 字符串编制索引,Elastisearch 也会将它们转换为数字:

PUT logstash/doc/1
{
  "Foo": {
    "x":"500",
    "y":"200"
  }
}

搜索新文档:

GET logstash/_search

请注意,returned 文档在 _source 字段中看起来与您将其发送到 Elasticsearch 的方式完全相同 - 这是故意的,Elasticsearch 始终以这种方式保留原始文档。尽管这些属性被索引为数字。您可以运行一个范围查询来确认:

GET logstash/_search
{
  "query":{
    "range" : {
        "Foo.x" : {
            "gte" : 500
        }
    }
  }
}

关于 Logstash,您可能希望为索引名称设置映射模板 logstash-*,因为 Logstash 会自动创建新索引:http://www.elastic.co/guide/en/elasticsearch/reference/1.5/indices-templates.html