如何在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
用 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