我将数据插入ID为123的Elasticsearch
localhost:9200/index/type/123
但我不知道下一个id会插入什么
如何在localhost中将数据插入到没有id的Elasticsearch:9200 / index / type?
答案 0 :(得分:9)
可以在不指定id的情况下执行索引操作。在这种情况下,将自动生成id。此外,op_type将自动设置为create。这是一个例子(注意使用POST而不是PUT):
$ curl -XPOST 'http://localhost:9200/twitter/tweet/' -d '{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elasticsearch"
}'
答案 1 :(得分:4)
就我而言,使用nodejs和elasticsearch包我是这样使用客户端:
client.index()
var elasticsearch = require ('elasticsearch');
let client = new elasticsearch.Client ({
host: '127.0.0.1: 9200'
});
client.index ({
index: 'myindex'
type: 'mytype',
body: {
properti1: 'val 1',
properti2: ['y', 'z'],
properti3: true,
}
}, function (error, response) {
if (error) {
console.log("error: ", error);
} else {
console.log("response: ", response);
}
});
如果未指定 id ,elasticsearch将自动生成一个
答案 2 :(得分:1)
您可以使用POST
请求创建新文档或数据对象,而无需在路径中指定id
属性。
curl -XPOST 'http://localhost:9200/stackoverflow/question' -d '
{
title: "How to insert data to elasticsearch without id in the path?"
}
答案 3 :(得分:0)
如果我们的数据没有自然ID,我们可以让Elasticsearch为我们自动生成一个ID。请求的结构发生了变化:我们不使用PUT动词(“将文档存储在此URL”),而是使用POST谓词(“将文档存储在此URL”)。
现在,URL仅包含_index
和_type
:
curl -X POST "localhost:9200/website/blog/" -H 'Content-Type: application/json' -d'
{
"title": "My second blog entry",
"text": "Still trying this out...",
"date": "2014/01/01"
}
'
除了已为我们生成_id字段外,响应与我们之前看到的类似:
{
"_index": "website",
"_type": "blog",
"_id": "AVFgSgVHUP18jI2wRx0w",
"_version": 1,
"created": true
}
自动生成的ID为20个字符,URL安全,Base64编码的GUID字符串。这些GUID是从改良的FlakeID方案生成的,该方案允许多个节点并行生成唯一的ID,而发生碰撞的几率基本上为零。
https://www.elastic.co/guide/en/elasticsearch/guide/current/index-doc.html
答案 4 :(得分:0)
就我而言,我试图将文档直接添加到索引中,例如localhost:9200/messages
,而不是localhost:9200/someIndex/messages
。
我必须将/_doc
附加到URL上才能使POST
成功:localhost:9200/messages/_doc
。否则,我将获得HTTP 405:
{"error":"Incorrect HTTP method for uri [/messages] and method [POST], allowed: [GET, PUT, HEAD, DELETE]","status":405}
这是我的完整cURL请求:
$ curl -X POST "localhost:9200/messages/_doc" -H 'Content-Type:
application/json' -d'
{
"user": "Jimmy Doe",
"text": "Actually, my only brother!",
"timestamp": "something"
}
'
{"_index":"messages","_type":"_doc","_id":"AIRF8GYBjAnm5hquWm61","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":2,"_primary_term":3}
答案 5 :(得分:-1)
可以将ID字段留空,而elasticsearch会将其分配为一个。例如,_bulk插入看起来像
{"create":{"_index":"products","_type":"product"}}\n
{JSON document 1}\n
{"create":{"_index":"products","_type":"product"}}\n
{JSON document 2}\n
{"create":{"_index":"products","_type":"product"}}\n
{JSON document 3}\n
...and so on
ID看起来像'AUvGyJMOOA8IPUB04vbF'