zoukankan      html  css  js  c++  java
  • solrj-solr Guide 4.7

      solrj是一个很容易使java应用程序和solr进行交互的一个API,solrj隐藏了很多连接Solr的细节,允许你的应用程序使用简单的高级方法和solr互动交流.

      solrj的核心就是 org.apache.solr.client.solrj包,下面包含了5个主要类.通过创建一个SolrServer开始,这个SolrServer就是你索要使用的solr实例,然后发出SolrRequests或者是SolrQuerys,最后返回SolrResponses.

      SolrServer是一个抽象类,所以为了连接远程主机的Solr实例,一般创建一个HttpSolrServer实例.这个实例主要用于通过http和Solr服务进行交互.

    String urlString = "http://localhost:8983/solr";
    SolrServer solr = new HttpSolrServer(urlString);

      创建一个SolrServer并不会使网络连接,当你在执行查询或者是其他操作时,才会连接网络,如果URL字符串不正确的话,会抛出一个MalformedURLException异常.

      一旦创建完SolrServer之后,就可以调用query(),add(),method()的方法.

    构建和运行SolrJ应用程序

      1. 添加to be in the classpath. solr-solrj-4.x.x.jar类.

      2.dist/solrj-lib下的类库需要加载.

      3.使用Maven的话,在pom.xml中添加: 

    <dependency>
      <groupId>org.apache.solr</groupId>
      <artifactId>solr-solrj</artifactId>
      <version>4.x.0</version>
    </dependency>

      如果担心solrJ扩展了客户端应用程序的大小,可以使用一个代码模糊处理工具像 ProGuard来删除你不使用的API.

    设置XMLResponseParser

      solrj使用的是二进制格式,而不是xml格式作为它的默认格式.较早版本的solr的用户通过设置解析器XMLResponseParser来使用XML格式操作.

    server.setParser(new XMLResponseParser());

    执行查询

      使用query()方法获取solr的搜索结果.你需要传递一个描述查询信息的SolrQuery对象,然后返回一个QueryResponse对象.

    SolrQuery有很多方法,很容易的添加参数用于选择请求处理器(handler),并且发送参数给handler.这里是一个很简单的例子,使用默认

    请求处理器,设置q参数:

    SolrQuery parameters = new SolrQuery();
    parameters.set("q", mQueryString);

    选择不同的请求处理器,只需要设置qt参数:

    parameters.set("qt", "/spellCheckCompRH");

    一旦设置完成SolrQuery,使用query()来提交:

    QueryResponse response = solr.query(parameters);

      这个客户端生成了一个网络连接,并发送了query查询信息,solr处理这个查询信息,然后response响应,并返回一个QueryResponse.

      QueryResponse就是一个满足查询参数的文档结果集合.可以通过getResults()方法直接得到检索结果文档,也可以调用其他方法来获取高亮和分面的信息.

    SolrDocumentList list = response.getResults();

    索引文档

      其他的操作也很简单,对于索引文档来说,你只需要创建一个SolrInputDocument对象,并通过SolrServer的add()方法传递数据,然后调用

    commit()方法即可.

    String urlString = "http://localhost:8983/solr";
    SolrServer solr = new HttpSolrServer(urlString);
    SolrInputDocument document = new SolrInputDocument();
    document.addField("id", "552199");
    document.addField("name", "Gouda cheese wheel");
    document.addField("price", "49.99");
    UpdateResponse response = solr.add(document);
    // Remember to commit your changes!
    solr.commit();

    用XML或者二进制格式上传内容(content)

      SolrJ允许您在XML和二进制格式上传内容而不是默认的XML格式.solrj可以使用以下使用二进制格式上传,同样采用相同的格式获取结果.

    server.setRequestWriter(new BinaryRequestWriter());

    使用ConcurrentUpdateSolrServer

      当实现Java应用程序时,这将会一次性加载大量的文档,ConcurrentUpdateSolrServer 是一个HttpSolrServer的替代类,ConcurrentUpdateSolrServer使用Buffer缓冲添加所有的文档,并将其写入开放HttpSolrServer中.这个类是线程安全的,虽然任意的SolrServer请求都能使用这个实现来完成,但是只推荐使用ConcurrrentUpdateSolrServer做/update请求.

    EmbeddedSolrServer

      这种嵌入方式在大多数情况下都是不推荐使用的,并且它支持相当有限的solr功能,尤其是不能在SolrCloud或者Index Replication.EmbeddedSolrServer的存在主要是帮助更容易的测试.

      对于EmbeddedSolrServer的使用,可以参考Solrj的Junit单元测试,org.apache.solr.client.solrj.embedded包.

    相关主题

      Solrj API 文档

      Solrj WiKi主页

      索引和基本数据操作(待发布)

    本节内容翻译自:Apache Solr Reference Guide 4.7,不当之处,请指正! 谢谢.

  • 相关阅读:
    一次线上问题引发的对于C#中相等判断的思考
    Node中的模块引入机制
    Node 各个版本支持ES2015特性的网站
    使用Chrome 中的 ssh 插件登陆 linux 服务器
    vmWare 虚机文件不能启动的事故处理
    JaveScript 中使用 XSLT转换XML文档
    浏览器上的坐标体系相关概念(客户区,页面,屏幕)
    visual Studio 中使用正则表达式来进行查找替换
    JavaScript 执行环境及作用域
    Laravel save部分字段失效的bug问题解决
  • 原文地址:https://www.cnblogs.com/a198720/p/4274146.html
Copyright © 2011-2022 走看看