Solr添加文档(XML)

在上一章中,我们学习解释了如何向Solr中添加JSON.CSV文件格式的数据。在本章中,将演示如何使用XML文档格式在Apache Solr索引中添加数据。

示例数据

假设我们需要使用XML文件格式将以下数据添加到Solr索引。

Student ID First Name Last Name Phone City
001 Rajiv Reddy 9848022337 Hyderabad
002 Siddharth Bhattacharya 9848022338 Kolkata
003 Rajesh Khanna 9848022339 Delhi
004 Preethi Agarwal 9848022330 Pune
005 Trupthi Mohanty 9848022336 Bhubaneshwar
006 Archana Mishra 9848022335 Chennai

使用XML添加文档

要将上述数据添加到Solr索引中,我们需要准备一个XML文档,如下所示。 将此文档保存在名称为sample.xml的文件中。

<add>
<doc>
<field name = "id">001</field>
<field name = "first name">Rajiv</field>
<field name = "last name">Reddy</field>
<field name = "phone">9848022337</field>
<field name = "city">Hyderabad</field>
</doc>
<doc>
<field name = "id">002</field>
<field name = "first name">Siddarth</field>
<field name = "last name">Battacharya</field>
<field name = "phone">9848022338</field>
<field name = "city">Kolkata</field>
</doc>
<doc>
<field name = "id">003</field>
<field name = "first name">Rajesh</field>
<field name = "last name">Khanna</field>
<field name = "phone">9848022339</field>
<field name = "city">Delhi</field>
</doc>
<doc>
<field name = "id">004</field>
<field name = "first name">Preethi</field>
<field name = "last name">Agarwal</field>
<field name = "phone">9848022330</field>
<field name = "city">Pune</field>
</doc>
<doc>
<field name = "id">005</field>
<field name = "first name">Trupthi</field>
<field name = "last name">Mohanthy</field>
<field name = "phone">9848022336</field>
<field name = "city">Bhuwaeshwar</field>
</doc>
<doc>
<field name = "id">006</field>
<field name = "first name">Archana</field>
<field name = "last name">Mishra</field>
<field name = "phone">9848022335</field>
<field name = "city">Chennai</field>
</doc>
</add>
XML

正如所看到的,写入添加数据到索引的XML文件包含三个重要的标签,<add> </add><doc></doc>, 以及 < field >< /field >

  • add − 这是用于将文档添加到索引的根标记。它包含一个或多个要添加的文档。
  • doc − 添加的文档应该包含在<doc> </ doc>标记中。文档包含字段形式的数据。
  • field − 字段标记包含文档的字段的名称和值。

准备好文档后,可以使用上一章中讨论的任何方法将此文档添加到索引。

假设XML文件(sample.xml)存在于Solrbin目录中,并且它将在名称为my_core的核心中进行索引,那么可以使用post工具将其添加到Solr索引中,如下所示 -

[yiibai@ubuntu:/usr/local/solr-6.4.0/bin]$ ./post -c my_core sample.xml
Shell

执行上述命令后,将得到以下输出 -

yiibai@ubuntu:/usr/local/solr-6.4.0/bin$ ./post -c my_core sample.xml
/usr/local/jdk1.8.0_65/bin/java -classpath /usr/local/solr-6.4.0/dist/solr-core-6.4.0.jar -Dauto=yes -Dc=my_core -Ddata=files org.apache.solr.util.SimplePostTool sample.xml
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/my_core/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
POSTing file sample.xml (application/xml) to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/my_core/update...
Time spent: 0:00:00.756
Shell

验证上面的操作

访问Apache Solr Web界面的主页并选择核心my_core。尝试通过在文本区域q中传递查询“:”来检索所有文档,并执行查询。执行时应该可以观察到所需的数据被添加到Solr索引。

Solr更新文档数据

使用XML更新文档

以下是用于更新现有文档中的字段的XML文件。将下面的内容保存在名称为update.xml的文件中。

<add>
<doc>
<field name = "id">001</field>
<field name = "first name" update = "set">Raj</field>
<field name = "last name" update = "add">Malhotra</field>
<field name = "phone" update = "add">9000000000</field>
<field name = "city" update = "add">Delhi</field>
</doc>
</add>
XML

正如上面看到的,写入更新数据的XML文件就类似之前用来添加文档的XML文件。 但唯一的区别是这里使用字段的一个update属性。

在这个示例中,我们将使用上述文档并尝试更新id001文档的字段。

假设XML文档(update.xml)存在于Solr的bin目录中。更新的核心是名称为my_core的索引,可以使用post工具更新如下 -

[yiibai@ubuntu:/usr/local/solr-6.4.0/bin]$ ./post -c my_core update.xml
Shell

执行上述命令后,将得到以下输出 -

yiibai@ubuntu:/usr/local/solr-6.4.0/bin$ ./post -c my_core update.xml
/usr/local/jdk1.8.0_65/bin/java -classpath /usr/local/solr-6.4.0/dist/solr-core-6.4.0.jar -Dauto=yes -Dc=my_core -Ddata=files org.apache.solr.util.SimplePostTool update.xml
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/my_core/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
POSTing file update.xml (application/xml) to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/my_core/update...
Time spent: 0:00:00.246
Shell

验证修改结果

访问Apache Solr Web界面的主页,选择核心 - my_core。 尝试通过在文本区域q中传递查询“”来检索所有文档,并执行查询。 执行时可以观察到文档已经更新了。如下图所示 -

Solr删除文档数据

删除文档

要从Apache Solr的索引中删除文档,我们需要在<delete> </ delete>标记之间指定要删除的文档的ID

<delete>
<id>003</id>
<id>005</id>
</delete>
XML

这里,此XML代码用于删除ID003005的文档。将此代码保存在名称为delete.xml的文件中。

如果要从属于名称为my_core的核心的索引中删除文档,则可以使用post工具发布delete.xml文件,如下所示。

[yiibai@ubuntu:/usr/local/solr-6.4.0/bin]$ ./post -c my_core delete.xml
Shell

执行上述命令后,将得到以下输出 -

yiibai@ubuntu:/usr/local/solr-6.4.0/bin$ ./post -c my_core delete.xml
/usr/local/jdk1.8.0_65/bin/java -classpath /usr/local/solr-6.4.0/dist/solr-core-6.4.0.jar -Dauto=yes -Dc=my_core -Ddata=files org.apache.solr.util.SimplePostTool delete.xml
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/my_core/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
POSTing file delete.xml (application/xml) to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/my_core/update...
Time spent: 0:00:00.124
XML

验证执行结果

访问Apache Solr Web界面的主页,选择核心 - my_core。 尝试通过在文本区域q中传递查询“”来检索所有文档,并执行查询。 执行时可以观察到指定的文档(ID003005)已删除。

删除字段

有时,需要基于除ID以外的字段来删除文档。例如,可能需要删除城市是Chennai的文档。

在这种情况下,需要在<query> </ query>标记对中指定字段的名称和值。

<delete>
<query>city:Chennai</query>
</delete>
XML

将上面代码保存到delete_field.xml文件中,并使用Solr的post工具在核心my_core上执行删除操作。

[yiibai@ubuntu:/usr/local/solr-6.4.0/bin]$ ./post -c my_core delete_field.xml
Shell

执行上述命令后,将产生以下输出。

yiibai@ubuntu:/usr/local/solr-6.4.0/bin$ ./post -c my_core delete_field.xml
/usr/local/jdk1.8.0_65/bin/java -classpath /usr/local/solr-6.4.0/dist/solr-core-6.4.0.jar -Dauto=yes -Dc=my_core -Ddata=files org.apache.solr.util.SimplePostTool delete_field.xml
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/my_core/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
POSTing file delete_field.xml (application/xml) to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/my_core/update...
Time spent: 0:00:00.225
Shell

验证执行结果

访问Apache Solr Web界面的主页,选择核心 - my_core。 尝试通过在文本区域q中传递查询“”来检索所有文档,并执行查询。 执行时可以观察到包含指定字段值对的文档被删除。

删除所有文档

类似删除一个指定删除某个字段一样,如果想删除索引中的所有文档,只需要在标签<query> </ query>之间传递符号“”,如下所示。

<delete>
<query>*:*</query>
</delete>
XML

将上面代码保存到delete_all.xml文件中,并使用Solr的post工具对核心my_core执行删除操作。

[yiibai@ubuntu:/usr/local/solr-6.4.0/bin]$ ./post -c my_core delete_all.xml
Shell

执行上述命令后,将产生以下输出。

yiibai@ubuntu:/usr/local/solr-6.4.0/bin$ ./post -c my_core delete_all.xml
/usr/local/jdk1.8.0_65/bin/java -classpath /usr/local/solr-6.4.0/dist/solr-core-6.4.0.jar -Dauto=yes -Dc=my_core -Ddata=files org.apache.solr.util.SimplePostTool delete_all.xml
SimplePostTool version 5.0.0
Posting files to [base] url http://localhost:8983/solr/my_core/update...
Entering auto mode. File endings considered are xml,json,jsonl,csv,pdf,doc,docx,ppt,pptx,xls,xlsx,odt,odp,ods,ott,otp,ots,rtf,htm,html,txt,log
POSTing file delete_all.xml (application/xml) to [base]
1 files indexed.
COMMITting Solr index changes to http://localhost:8983/solr/my_core/update...
Time spent: 0:00:00.114
Shell

验证执行结果

访问Apache Solr Web界面的主页,选择核心 - my_core。 尝试通过在文本区域q中传递查询“”来检索所有文档,并执行查询。执行时您可以观察到包含指定字段值对的文档全被删除了。

使用Java(客户端API)删除所有文档

以下是使用Java程序向Apache Solr索引删除文档。将此代码保存在名称为DeletingAllDocuments.java的文件中。

import java.io.IOException;  

import org.apache.Solr.client.Solrj.SolrClient;
import org.apache.Solr.client.Solrj.SolrServerException;
import org.apache.Solr.client.Solrj.impl.HttpSolrClient;
import org.apache.Solr.common.SolrInputDocument; public class DeletingAllDocuments {
public static void main(String args[]) throws SolrServerException, IOException {
//Preparing the Solr client
String urlString = "http://localhost:8983/Solr/my_core";
SolrClient Solr = new HttpSolrClient.Builder(urlString).build(); //Preparing the Solr document
SolrInputDocument doc = new SolrInputDocument(); //Deleting the documents from Solr
Solr.deleteByQuery("*"); //Saving the document
Solr.commit();
System.out.println("Documents deleted");
}
}
Java

通过在终端中执行以下命令编译上述代码 -

[yiibai@ubuntu:/usr/local/solr-6.4.0/bin]$ javac DeletingAllDocuments.java
[yiibai@ubuntu:/usr/local/solr-6.4.0/bin]$ java DeletingAllDocuments
Java

执行上述命令后,将得到以下输出。

Documents deleted

Solr记录-solr文档xml的更多相关文章

  1. Solr 18 - 通过SolrJ局部更新Solr中的文档 (原子操作、非覆盖操作)

    目录 1 需求分析 2 需求实现 2.1 pom.xml依赖 2.2 Java代码示例 3 补充说明 3.1 关于文档中_version_的取值说明 3.2 store=true/false的区别 1 ...

  2. Solr记录-solr内核与索引

    Solr核心(内核) Solr核心(Core)是Lucene索引的运行实例,包含使用它所需的所有Solr配置文件.我们需要创建一个Solr Core来执行索引和分析等操作. Solr应用程序可以包含一 ...

  3. Solr记录-solr检索和查询数据

    Solr检索数据 在本章中,我们将讨论如何使用Java Client API检索数据.假设有一个名为sample.csv的.csv文档,其中包含以下内容. 001,9848022337,Hyderab ...

  4. Solr开发参考文档(转)

    Solr开发文档 Solr 是一种可供企业使用的.基于 Lucene 的搜索服务器,它支持层面搜索.命中醒目显示和多种输出格式.在这篇文章中,将介绍 Solr 并展示如何轻松地将其表现优异的全文本搜索 ...

  5. Solr记录-solr介绍及配置

    Solr是一个开源搜索平台,用于构建搜索应用程序. 它建立在Lucene(全文搜索引擎)之上. Solr是企业级的,快速的和高度可扩展的. 使用Solr构建的应用程序非常复杂,可提供高性能. 为了在C ...

  6. Solr记录-solr基础内容

    Solr架构(体系结构) 在本章中,我们将讨论Apache Solr的架构. 下图显示了Apache Solr的体系结构的框图. Solr架构 - 构件块以下是Apache Solr的主要构建块(组件 ...

  7. 新增记录txt文档

    StringBuilder s = new StringBuilder(); s.Append("[" + dt.Rows[i]["Store"].Conver ...

  8. Solr 15 - Solr添加和更新索引的过程 (文档的路由细节)

    目录 1 添加文档的细节 1.1 注册观察者 - watcher 1.2 文档的路由 - document route 1.2.1 路由算法 1.2.2 Solr路由的实现类 1.2.3 implic ...

  9. WebAPI使用多个xml文件生成帮助文档

    一.前言 上篇有提到在WebAPI项目内,通过在Nuget里安装(Microsoft.AspNet.WebApi.HelpPage)可以根据注释生成帮助文档,查看代码实现会发现是基于解析项目生成的xm ...

随机推荐

  1. Microsoft Dynamics CRM 常用JS语法(已转成vs2017语法提示)

    背景 最近接触到Microsoft Dynamics CRM的开发.前端js是必不可少的部分,奈何没有一个语法提示,点不出来后续的语句. 在vscode上面搜索插件的时候发现,有一个大神写的插件htt ...

  2. IOS免越狱虚拟定位修改工具共享 Jocation

    Jocation IOS虚拟定位修改器 具体使用方法可以按照 location cleaned软件相同的操作. 主要是因为本人有一部 IphoneX 和Iphone Xs Max 网上的locatio ...

  3. 《杜增强讲Unity之Tanks坦克大战》10-相机控制

    10 相机控制 本节主要学习如何控制相机自动调整位置和焦距,使两个坦克一直同时在视野内.   image 在Hierarchy点击右键   image 点击 Create Empty,生成空对象,改名 ...

  4. python基础面试题

    函数1def foo(arg,li=[]): li.append(arg) return li list1 = foo(21) list2 = foo(11,[2]) list3 = foo(28) ...

  5. Win10 + vs2017 编译并配置tesseract4.1.0

    tesseract 是一个开源的OCR (Optical Character Recognition , 光学字符识别) 引擎,本文就介绍一下自己在编译 tesseract4.1.0时遇到的一些坑,希 ...

  6. 华为笔试——C++平安果dp算法

    题目:平安果 题目介绍:给出一个m*n的格子,每个格子里有一定数量的平安果,现在要求从左上角顶点(1,1)出发,每次走一格并拿走那一格的所有平安果,且只能向下或向右前进,最终到达右下角顶点(m,n), ...

  7. PHP 设计模式六大原则

    http://www.cnblogs.com/yujon/p/5536118.html 设计模式六大原则(1):单一职责原则 不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责 设计模 ...

  8. CodeMirror mode编写

    Writing CodeMirror Modes Modes typically consist of a single JavaScript file. This file defines, in ...

  9. 20135202闫佳歆--week5 系统调用(下)--学习笔记

    此为个人笔记存档 week 5 系统调用(下) 一.给MenuOS增加time和time-asm命令 这里老师示范的时候是已经做好的了: rm menu -rf 强制删除 git clone http ...

  10. Linux内核分析 计算机是如何工作的——by王玥

    1.冯诺依曼体系结构:也就是指存储程序计算机 硬件(存储程序计算机工作模式): 软件(程序员角度): 2.API:程序员与计算机的接口界面 ABI:程序与CPU的接口界面 3.X86的实现: 4.X8 ...