开发者社区> shy丶gril> 正文

跟益达学Solr5之批量索引JSON数据

简介:
+关注继续查看

     假定你有这样一堆JSON数据,

 

Json代码  收藏代码
  1. [  
  2.   {"id":"1""name":"Red Lobster""city":"San Francisco, CA""type":"Sit-down Chain""state":"California""tags":["sea food""sit down"], "price":33.00},  
  3.   {"id":"2""name":"Red Lobster""city":"Atlanta, GA""type":"Sit-down Chain""state":"Georgia""tags":["sea food""sit-down"], "price":22.00},  
  4.   {"id":"3""name":"Red Lobster""city":"New York, NY""type":"Sit-down Chain""state":"New York""tags":["sea food""sit-down"], "price":29.00},  
  5.   {"id":"4""name":"McDonalds""city":"San Francisco, CA""type":"Fast Food""state":"California""tags":["fast food""hamburgers""coffee""wi-fi""breakfast"], "price":9.00},  
  6.   {"id":"5""name":"McDonalds""city":"Atlanta, GA""type":"Fast Food""state":"Georgia""tags":["fast food""hamburgers""coffee""wi-fi""breakfast"], "price":4.00},  
  7.   {"id":"6""name":"McDonalds""city":"New York, NY""type":"Fast Food""state":"New York""tags":["fast food""hamburgers""coffee""wi-fi""breakfast"], "price":4.00},  
  8.   {"id":"7""name":"McDonalds""city":"Chicago, IL""type":"Fast Food""state":"Illinois""tags":["fast food""hamburgers""coffee""wi-fi""breakfast"], "price":4.00},  
  9.   {"id":"8""name":"McDonalds""city":"Austin, TX""type":"Fast Food""state":"Texas""tags":["fast food""hamburgers""coffee""wi-fi""breakfast"], "price":4.00},  
  10.   {"id":"9""name":"Pizza Hut""city":"Atlanta, GA""type":"Sit-down Chain""state":"Georgia""tags":["pizza""sit-down""delivery"], "price":15.00},  
  11.   {"id":"10""name":"Pizza Hut""city":"New York, NY""type":"Sit-down Chain""state":"New York""tags":["pizza""sit-down""delivery"], "price":24.00},  
  12.   {"id":"11""name":"Pizza Hut""city":"Austin, TX""type":"Sit-down Chain""state":"Texas""tags":["pizza""sit-down""delivery"], "price":18.00},  
  13.   {"id":"12""name":"Freddy's Pizza Shop""city":"Los Angeles, CA""type":"Local Sit-down""state":"California""tags":["pizza""pasta""sit-down"], "price":25.00},  
  14.   {"id":"13""name":"The Iberian Pig""city":"Atlanta, GA""type":"Upscale""state":"Georgia""tags":["spanish""tapas""sit-down""upscale"], "price":45.00},  
  15.   {"id":"14""name":"Sprig""city":"Atlanta, GA""type":"Local Sit-down""state":"Georgia""tags":["sit-down""gluten-free""southern cuisine"], "price":15.00},  
  16.   {"id":"15""name":"Starbucks""city":"San Francisco, CA""type":"Coffee Shop""state":"California""tags":["coffee""breakfast"], "price":7.50},  
  17.   {"id":"16""name":"Starbucks""city":"Atlanta, GA""type":"Coffee Shop""state":"Georgia""tags":["coffee""breakfast"], "price":4.00},  
  18.   {"id":"17""name":"Starbucks""city":"New York, NY""type":"Coffee Shop""state":"New York""tags":["coffee""breakfast"], "price":6.50},  
  19.   {"id":"18""name":"Starbucks""city":"Chicago, IL""type":"Coffee Shop""state":"Illinois""tags":["coffee""breakfast"], "price":6.00},  
  20.   {"id":"19""name":"Starbucks""city":"Austin, TX""type":"Coffee Shop""state":"Texas""tags":["coffee""breakfast"], "price":5.00},  
  21.   {"id":"20""name":"Starbucks""city":"Greenville, SC""type":"Coffee Shop""state":"South Carolina""tags":["coffee""breakfast"], "price":3.00}  
  22. ]  

   你想导入到Solr中进行索引,怎么办?其实Solr的Web UI界面就可以操作,在左侧有个Documents菜单,表示导入Document(当然也支持Document更新)的意思,Document加个s即表示支持批量导入多个Document,如图:

 Document Type即表示你的Document数据来源是什么,是来自于JSON,来自于XML,来自于CVS等等,

 

 Commit Within表示document提交必须在指定的毫秒数内完成,否则提交操作视为超时;

 Overwriter即表示是否覆盖索引目录下已有的索引数据,设置为false即表示不覆盖已有索引只在原来的基础上追加索引数据;

 Boost:表示设置Document的权重,默认值为1.0;

 如果你只是单个JSON对象需要导入,那直接选择Document Type为JSON即可,当你选择Document Type为JSON后,Document(s)文本框会提示一个示例,如图:

 当然你也可以选择
Document Type为Solr Command(raw XML or JSON),只不过这时候JSON数据格式就有特殊要求了,你的JSON数据格式需要这样定义:

Json代码  收藏代码
  1. {  
  2.     "add": {  
  3.         "doc": {.......}  
  4.     },  
  5.     "add": {  
  6.         "doc": {.......}  
  7.     },  
  8.     "add": {  
  9.         "doc": {.......}  
  10.     },  
  11.     "add": {  
  12.         "doc": {.......}  
  13.     },  
  14.     "add": {  
  15.         "doc": {.......}  
  16.     },  
  17.    ............. and so on.  
  18. }  

    其中{.........}部分就是你的Document对象,其余部分为固定格式。使用这种格式正好弥补了Document Type为JSON这种方式只能一条一条的导入,效率太低,当你需要批量导入多个Document时,采用这种格式支持批量导入多个Document。

 

    如果你需要导入XML数据,你需要选择Document Type为XML,如图:

 <doc></doc>标签之间的就是你的XML数据,不过它跟Document Type选择为JSON有同样的弊端就是只支持单条导入,如果你需要批量导入XML数据,你同样可以选择Document Type为Solr Command(raw XML or JSON),只不过这时候,数据格式应该是类似这样的:

Xml代码  收藏代码
  1. <add>  
  2.     <doc>  
  3.         <id>xxxx</id>  
  4.         <name>xxxxxxxx</name>  
  5.         <age>xxxxxxxx</age>  
  6.     </doc>  
  7.       
  8.     <doc>  
  9.         <id>xxxx</id>  
  10.         <name>xxxxxxxx</name>  
  11.         <age>xxxxxxxx</age>  
  12.     </doc>  
  13.   
  14.     <doc>  
  15.         <id>xxxx</id>  
  16.         <name>xxxxxxxx</name>  
  17.         <age>xxxxxxxx</age>  
  18.     </doc>  
  19.       
  20.     ............ and so on  
  21. </add>  

    如果你想更新Document,那就把<add>元素改成<update>即可,同理还有<delete>你懂的,先前在讲post.jar的时候我有提到过,具体请参阅《跟益达学Solr5之玩转post.jar》,OK,说了那么多,那现在我就以JSON数据为例进行一个操作示范,假定我有这样一个JSON数据,如图:

     首先我们需要从JSON数据中提炼出Field域,并在我们的Schema.xml配置文件定义域,如图:

   然后我们需要把传统的JSON数据转换成Solr能识别的格式,如图:

Json代码  收藏代码
  1. {  
  2.     "add": {  
  3.         "doc": {"id":"1""name":"Red Lobster""city":"San Francisco, CA""type":"Sit-down Chain""state":"California""tags":["sea food""sit down"], "price":33.00}  
  4.     },  
  5.     "add": {  
  6.         "doc": {"id":"2""name":"Red Lobster""city":"Atlanta, GA""type":"Sit-down Chain""state":"Georgia""tags":["sea food""sit-down"], "price":22.00}  
  7.     },  
  8.     "add": {  
  9.         "doc": {"id":"3""name":"Red Lobster""city":"New York, NY""type":"Sit-down Chain""state":"New York""tags":["sea food""sit-down"], "price":29.00}  
  10.     },  
  11.     "add": {  
  12.         "doc": {"id":"4""name":"McDonalds""city":"San Francisco, CA""type":"Fast Food""state":"California""tags":["fast food""hamburgers""coffee""wi-fi""breakfast"], "price":9.00}  
  13.     },  
  14.     "add": {  
  15.         "doc": {"id":"5""name":"McDonalds""city":"Atlanta, GA""type":"Fast Food""state":"Georgia""tags":["fast food""hamburgers""coffee""wi-fi""breakfast"], "price":4.00}  
  16.     },  
  17.     "add": {  
  18.         "doc": {"id":"6""name":"McDonalds""city":"New York, NY""type":"Fast Food""state":"New York""tags":["fast food""hamburgers""coffee""wi-fi""breakfast"], "price":4.00}  
  19.     },  
  20.     "add": {  
  21.         "doc": {"id":"7""name":"McDonalds""city":"Chicago, IL""type":"Fast Food""state":"Illinois""tags":["fast food""hamburgers""coffee""wi-fi""breakfast"], "price":4.00}  
  22.     },  
  23.     "add": {  
  24.         "doc": {"id":"8""name":"McDonalds""city":"Austin, TX""type":"Fast Food""state":"Texas""tags":["fast food""hamburgers""coffee""wi-fi""breakfast"], "price":4.00}  
  25.     },  
  26.     "add": {  
  27.         "doc": {"id":"9""name":"Pizza Hut""city":"Atlanta, GA""type":"Sit-down Chain""state":"Georgia""tags":["pizza""sit-down""delivery"], "price":15.00}  
  28.     },  
  29.     "add": {  
  30.         "doc": {"id":"10""name":"Pizza Hut""city":"New York, NY""type":"Sit-down Chain""state":"New York""tags":["pizza""sit-down""delivery"], "price":24.00}  
  31.     },  
  32.     "add": {  
  33.         "doc": {"id":"11""name":"Pizza Hut""city":"Austin, TX""type":"Sit-down Chain""state":"Texas""tags":["pizza""sit-down""delivery"], "price":18.00}  
  34.     },  
  35.     "add": {  
  36.         "doc": {"id":"12""name":"Freddy's Pizza Shop""city":"Los Angeles, CA""type":"Local Sit-down""state":"California""tags":["pizza""pasta""sit-down"], "price":25.00}  
  37.     },  
  38.     "add": {  
  39.         "doc": {"id":"13""name":"The Iberian Pig""city":"Atlanta, GA""type":"Upscale""state":"Georgia""tags":["spanish""tapas""sit-down""upscale"], "price":45.00}  
  40.     },  
  41.     "add": {  
  42.         "doc": {"id":"14""name":"Sprig""city":"Atlanta, GA""type":"Local Sit-down""state":"Georgia""tags":["sit-down""gluten-free""southern cuisine"], "price":15.00}  
  43.     },  
  44.     "add": {  
  45.         "doc": {"id":"15""name":"Starbucks""city":"San Francisco, CA""type":"Coffee Shop""state":"California""tags":["coffee""breakfast"], "price":7.50}  
  46.     },  
  47.     "add": {  
  48.         "doc": {"id":"16""name":"Starbucks""city":"Atlanta, GA""type":"Coffee Shop""state":"Georgia""tags":["coffee""breakfast"], "price":4.00}  
  49.     },  
  50.     "add": {  
  51.         "doc": {"id":"17""name":"Starbucks""city":"New York, NY""type":"Coffee Shop""state":"New York""tags":["coffee""breakfast"], "price":6.50}  
  52.     },  
  53.     "add": {  
  54.         "doc": {"id":"18""name":"Starbucks""city":"Chicago, IL""type":"Coffee Shop""state":"Illinois""tags":["coffee""breakfast"], "price":6.00}  
  55.     },  
  56.     "add": {  
  57.         "doc": {"id":"19""name":"Starbucks""city":"Austin, TX""type":"Coffee Shop""state":"Texas""tags":["coffee""breakfast"], "price":5.00}  
  58.     },  
  59.     "add": {  
  60.         "doc": {"id":"20""name":"Starbucks""city":"Greenville, SC""type":"Coffee Shop""state":"South Carolina""tags":["coffee""breakfast"], "price":3.00}  
  61.     }  
  62. }  

    然后启动你的Tomcat,然后如图操作:

 

    提交后,执行查询,如图:

 as

   请注意Document Type选择项,如果你选择为JSON,那你将会收到这样一个异常,如图: 

    示例相关的配置以及测试数据,请看底下的附件,如果你们在操作过程中,遇到任何问题,请联系我,同时也欢迎各路Java高手加群一起交流学习,

   益达Q-Q:                7-3-6-0-3-1-3-0-5

 

   益达的Q-Q群:      1-0-5-0-9-8-8-0-6

转载:http://iamyida.iteye.com/blog/2215711

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Hologres技术揭秘: JSON半结构化数据的极致分析性能
本文将会介绍Hologres JSON半结构化数据的极致分析性能实现原理。
257 0
PHP传递给js的JSON数据无法反序列化
PHP传递给js的JSON数据无法反序列化
23 0
调用后端接口时响应的json数据里面中文变成问号
调用后端接口时响应的json数据里面中文变成问号
17 0
ajax请求json和xml数据及对json和xml格式数据的解析
ajax请求json和xml数据及对json和xml格式数据的解析
29 0
为JSON 数据加入斜杠 \
为JSON 数据加入斜杠 \
22 0
自动把Excel转Json格式数据
在实际工作中,我们常常使用Excel记录各种数据,但在各种应用系统传输数据却使用JSON格式,这就需要把Excel转为JSON。如果能把数据转换传输过程自动化就更完美了。
42 0
Servlet练习—获取页面body中json数据
Servlet练习—获取页面body中json数据
33 0
Golang 处理复杂格式JSON数据(多类型混合)
Golang 处理复杂格式JSON数据(多类型混合)
33 0
后端 传输 json 数据(导包错误)
后端 传输 json 数据(导包错误)
31 0
【分享】宜搭集成自动化,Groovy节点一般用法,解析JSON数据
【分享】宜搭集成自动化,Groovy节点一般用法,解析JSON数据 by 页一
473 0
+关注
shy丶gril
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
基于HBase的海量数据查询与检索解析_游骐_202105_v3
立即下载
Phoenix Search Index 功能与应用场景介绍
立即下载
大批量处理excel文件到ODPS中方案
立即下载