码迷,mamicode.com
首页 > Windows程序 > 详细

Elasticsearch使用REST API实现全文检索

时间:2015-08-05 00:49:47      阅读:364      评论:0      收藏:0      [点我收藏+]

标签:

通过rest api添加检索数据,阅读官方文档可以发现,elasticsearch支持动态映射,但是其中有不少问题,且听慢慢详解。

本文主要讲述三点内容:

1 Elasticsearch常用的rest api

2 Elasticsearch在添加索引时,动态映射报错:MapperParsingException[failed to parse]nested;JsonParseException

3 Elasticsearch使用bulk命令添加索引数据

ES REST API

  elasticsearch支持通过http请求响应服务,因此通过curl命令,可以发送http请求,并得到json返回内容。

  常用的rest请求包括:

  检查ES集群状态:

curl localhost:9200/_cat/health?v

  检查ES节点状态:

curl localhost:9200/_cat/nodes?v

  查询所有的索引:

curl localhost:9200/_cat/indices?v

  创建索引这种方式在4.1版本下会出现问题,下一小节再说):

curl -XPUT localhost:9200/索引名字/类型/id -d {"name":"xingoo"}

  删除索引

curl -XDELETE localhost:9200/索引名字

  查询索引:

curl -XGET localhost:9200/索引名字/类型名字/id

ES 动态映射 出错

  Elasticsearch中的文档是固定的格式,正常来说,都应该先定义文档的格式,再导入数据。

  但是Elasticsearch支持动态映射,也就是说,如果{"test1":123,"test2":"123"}会自动把第一个字段解析成数字number,第二个字段解析成字符串string类型。

  然后我们尝试在dos下执行创建索引命令:

技术分享

  可以看到,最开始ES中没有任何的索引,在通过curl命令添加索引后,提示错误:

  MapperParsingException,它并不能把name解析成字符串,而是把它解析成boolean类型,仅支持true,false,或者null。而查询索引我们发现,此时,indexname已经建立好了。此时查询映射,并没有任何的映射信息:

技术分享

  经过试验,发现动态映射只支持boolean和数字long,所有的非数字,elasticsearch都会自动解析成boolean类型。

技术分享

技术分享

 

  总结一句话,官方文档无论怎么说动态映射!它只能识别boolean和数字。不论你怎么尝试,反正我是不信了。(版本1.7)

ES 使用bulk 添加数据

  动态映射无法添加数据,不要担心!可以使用bulk命令,添加json文件内的数据。

  1 定义json数据文件:

{"index":{"_index":"aaa123","_id":1}}
{"name":"xingoo","age":25}
{"index":{"_index":"aaa123","_id":2}}
{"name":"test111","age":31}
{"index":{"_index":"aaa123","_id":3}}
{"name":"test222","age":42}
{"index":{"_index":"aaa123","_id":4}}
{"name":"test333","age":13}

  注意的是,json文件名称随意指定,第一行定义了索引和一些常用字段:

  _index定义了索引的名称,如果没有指定需要在curl命令中添加索引名称字段

  _type定义了索引的类型,如果没有指定需要在curl命令中添加索引类型字段

  _id定义了该行数据的id,如果没有指定,会随机生成一串数字。

  2 执行命令

  进入到json文件所在的目录,执行命令

curl localhost:9200/索引名称/索引类型/_bulk?pretty --data-binary @data.json

  注意的是:

  如果json文件中定义了_index和_type,那么这里可以不写变成(即便写了也会按照json文件中的生成)

curl localhost:9200/_bulk?pretty --data-binary @data.json

  类似的,如果按照上面我们定义了_index却没有定义_type,那么索引会是aaa123,类型为我们curl命令中指定的类型。

技术分享

  可以看到上面虽然指定了索引名称为bbb123,类型为ccc123,但是json文件中指定了索引名称为aaa123。

  最后的索引文件中,索引名称为aaa123,类型为ccc123。

  查询索引状态,可以发现正常了。

技术分享

Elasticsearch使用REST API实现全文检索

标签:

原文地址:http://www.cnblogs.com/xing901022/p/4703323.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!