您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
elasticSearch创建索引及sense的put请求出现request body is required问题的解决
发布时间:2021-08-16 16:45:24编辑:雪饮阅读()
要索引第一个JSON对象,我们对REST API创建一个PUT请求到一个由索引名称,类型名称和ID组成的URL。 也就是:http://localhost:9200/<index>/<type>/[<id>]。
索引和类型是必需的,而id部分是可选的。如果不指定ID,ElasticSearch会为我们生成一个ID。 但是,如果不指定id,应该使用HTTP的POST而不是PUT请求。
索引名称是任意的。如果服务器上没有此名称的索引,则将使用默认配置来创建一个索引。
至于类型名称,它也是任意的。 它有几个用途,包括:
每种类型都有自己的ID空间。
不同类型具有不同的映射(“模式”,定义属性/字段应如何编制索引)。
搜索多种类型是可以的,并且也很常见。
现在我们来索引一些内容! 可以把任何东西放到索引中,只要它可以表示为单个JSON对象。 在本教程中,使用索引和搜索电影的一个示例。这是一个经典的电影对象信息:
{
"title": "The Godfather",
"director": "Francis Ford Coppola",
"year": 1972
}
要创建一个索引,这里使用索引的名称为“movies”,类型名称(“movie”)和id(“1”),并按照上述模式使用JSON对象在正文中进行请求。
这里报错了request body is required,但实际上我们的语法是没有问题,至少我认为是没有问题的。
为什么报了这个错误呢?
据说“插件可用,但是新版的es,不支持插件请求发出的header。”,可能就是因为这个原因导致的,如果这里只是get请求,应该添加这个head就没有问题,但是可能put请求带有body,但是body可能因为“插件可用,但是新版的es,不支持插件请求发出的header。”的相关影响,导致无法携带过去了。
那么sense暂且先不管它,我们不是还有curl吗?windows自带都有好像,至少我的win10就是自带有的。
那么在windows自带的这个curl种我们请求形如:
C:\Users\Administrator>curl -XPUT "http://localhost:9200/movies/movie/1" -H "Content-Type: application/json" -d "{ \"title\": \"The Godfather\", \"director\": \"Francis Ford Coppola\", \"year\": 1972 }"
{"_index":"movies","_type":"movie","_id":"1","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}
这里看起来很乱,其实很简单,就是用-H设置请求头,用-d后面跟着一对双引号中间囊括一个json,而由于是双引号囊括,那么json中本来的双引号就都需要转义下,那么据说在linux中curl的这个-d后面可以直接用一对单引号囊括,如果是单引号囊括,则可以不用在json内部中进行双引号转义。
然后-XPUT就是指定了put方法,-xput后面跟着一个请求路径也是要用一对双引号囊括的。
执行请求后,可以看到接收到来自ElasticSearch响应的JSON对象。如下所示
{"_index":"movies","_type":"movie","_id":"1","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}
响应对象包含有关索引操作的信息,例如它是否成功(“ok”)和文档ID,如果不指定则ElasticSearch会自己生成一个。
如果运行Sense提供的默认搜索请求(可以使用Sense中的“历史记录”按钮访问,因为确实已执行它)过了,就会看到返回有数据的结果。
在上面返回结果中,看到的是搜索结果而不是错误或是空的结果。
关键字词:elasticSearch,索引,创建索引,request body is required,sense