跟益达学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

目录
相关文章
|
3月前
|
JSON PHP 数据格式
|
3月前
|
JSON JavaScript 前端开发
JavaScript 如何对 JSON 数据进行冒泡排序?
JavaScript 如何对 JSON 数据进行冒泡排序?
51 0
|
1月前
|
存储 JSON Apache
揭秘 Variant 数据类型:灵活应对半结构化数据,JSON查询提速超 8 倍,存储空间节省 65%
在最新发布的阿里云数据库 SelectDB 的内核 Apache Doris 2.1 新版本中,我们引入了全新的数据类型 Variant,对半结构化数据分析能力进行了全面增强。无需提前在表结构中定义具体的列,彻底改变了 Doris 过去基于 String、JSONB 等行存类型的存储和查询方式。
揭秘 Variant 数据类型:灵活应对半结构化数据,JSON查询提速超 8 倍,存储空间节省 65%
|
2月前
|
XML 机器学习/深度学习 JSON
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
29 0
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
|
28天前
|
JSON 数据格式
糊涂工具类(hutool)post请求设置body参数为json数据
糊涂工具类(hutool)post请求设置body参数为json数据
19 1
|
29天前
|
JSON 前端开发 数据格式
Ajax传递json数据
Ajax传递json数据
11 0
|
30天前
|
JSON 并行计算 API
使用CJSON/Nlohmann:快速简便地在C/C++中处理JSON数据
使用CJSON/Nlohmann:快速简便地在C/C++中处理JSON数据
74 0
|
1月前
|
JSON 数据格式 Python
Python生成JSON数据
Python生成JSON数据
22 0
|
1月前
|
JSON 数据可视化 Linux
数据可视化工具JSON Crack结合内网穿透实现公网访问
数据可视化工具JSON Crack结合内网穿透实现公网访问
数据可视化工具JSON Crack结合内网穿透实现公网访问
|
2月前
|
JSON fastjson Java
FastJSON操作各种格式的JSON数据
FastJSON处理各种格式的JSON数据