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

相关文章
淘宝商品详情API的调用流程(python请求示例以及json数据示例返回参考)
JSON数据示例:需要提供一个结构化的示例,展示商品详情可能包含的字段,如商品标题、价格、库存、描述、图片链接、卖家信息等。考虑到稳定性,示例应基于淘宝开放平台的标准响应格式。
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——封装统一返回的数据结构
本文介绍了在Spring Boot中封装统一返回的数据结构的方法。通过定义一个泛型类`JsonResult&lt;T&gt;`,包含数据、状态码和提示信息三个属性,满足不同场景下的JSON返回需求。例如,无数据返回时可设置默认状态码&quot;0&quot;和消息&quot;操作成功!&quot;,有数据返回时也可自定义状态码和消息。同时,文章展示了如何在Controller中使用该结构,通过具体示例(如用户信息、列表和Map)说明其灵活性与便捷性。最后总结了Spring Boot中JSON数据返回的配置与实际项目中的应用技巧。
111 0
|
1月前
|
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——使用 fastJson 处理 null
本文介绍如何使用 fastJson 处理 null 值。与 Jackson 不同,fastJson 需要通过继承 `WebMvcConfigurationSupport` 类并覆盖 `configureMessageConverters` 方法来配置 null 值的处理方式。例如,可将 String 类型的 null 转为 &quot;&quot;,Number 类型的 null 转为 0,避免循环引用等。代码示例展示了具体实现步骤,包括引入相关依赖、设置序列化特性及解决中文乱码问题。
60 0
|
1月前
|
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——Spring Boot 默认对Json的处理
本文介绍了在Spring Boot中返回Json数据的方法及数据封装技巧。通过使用`@RestController`注解,可以轻松实现接口返回Json格式的数据,默认使用的Json解析框架是Jackson。文章详细讲解了如何处理不同数据类型(如类对象、List、Map)的Json转换,并提供了自定义配置以应对null值问题。此外,还对比了Jackson与阿里巴巴FastJson的特点,以及如何在项目中引入和配置FastJson,解决null值转换和中文乱码等问题。
75 0
如何在 Postman 中上传文件和 JSON 数据
如果你想在 Postman 中同时上传文件和 JSON 数据,本文将带你一步一步地了解整个过程,包括最佳实践和技巧,让你的工作更轻松。
如何在 Postman 中发送 JSON 数据
我们将深入探讨使用 Postman 发送 JSON 数据这一主题,Postman 是一款强大的 API 测试和开发工具。无论您是经验丰富的开发人员还是新手,掌握这项技能对于高效的 API 测试和开发都至关重要。
如何在Python中高效实现CSV到JSON的数据转换
在实际项目中,数据格式转换是常见问题,尤其从CSV到JSON的转换。本文深入探讨了多种转换方法,涵盖Python基础实现、数据预处理、错误处理、性能优化及调试验证技巧。通过分块处理、并行处理等手段提升大文件转换效率,并介绍如何封装为命令行工具或Web API,实现自动化批量处理。关键点包括基础实现、数据清洗、异常捕获、性能优化和单元测试,确保转换流程稳定高效。
174 83
怎样用 esProc 计算来自 Restful 的多层 json 数据
esProc 是一款强大的数据处理工具,可简化 Java 处理 Restful 接口返回的复杂多层 JSON 数据的难题。通过 esProc,不仅能轻松访问和解析 Restful 数据,还能高效完成复杂计算任务,并可无缝嵌入 Java 应用中作为计算引擎使用。例如,筛选特定分类订单或计算金额,esProc 的脚本简洁直观,远优于传统 SQL 或纯 Java 实现。此外,esProc 支持安全认证(如 Cookie 和 Token)及 JDBC 集成,为开发者提供灵活高效的解决方案。
何如定义 JSON Schema 并验证该 json 数据?
本文定义了一个包含 audio 和 tags 两个必需属性的 JSON Schema,用于规范数据结构。其中,audio 是非空字符串,表示音频组件;tags 是非空数组,表示标签组件。通过示例数据和验证工具(如 ajv, NJsonSchema),可确保 JSON 数据符合 Schema 要求,从而保障数据的一致性和正确性。
68 1
JSON数据解析实战:从嵌套结构到结构化表格
在信息爆炸的时代,从杂乱数据中提取精准知识图谱是数据侦探的挑战。本文以Google Scholar为例,解析嵌套JSON数据,提取文献信息并转换为结构化表格,通过Graphviz制作技术关系图谱,揭示文献间的隐秘联系。代码涵盖代理IP、请求头设置、JSON解析及可视化,提供完整实战案例。
176 4
JSON数据解析实战:从嵌套结构到结构化表格
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等