小编典典

从Solr检索对象

json

所以,我有一个 基于Java的Web项目 ,从3个独立的服务检索到的信息显示,托管在不同的服务器上,我使用 的Apache HTTP客户端
来获取通过在REST API信息 JSON ,使用 GSON库 。我将Json转换为用于显示信息的POJO。

现在,我想在项目中实现搜索功能,因此我将Solr安装在单独的服务器上,我想要的是:

  1. 为所有3个服务在solr服务器中索引JSON。

  2. 从Solr以我的项目中描述的POJO的形式获取搜索结果

我知道第(1)点可以通过来完成jsonRequestHandler,但是我不想编写单独的索引逻辑,我在项目中使用Solrj来提取信息。

所以我想知道

  • solrj可以使用我的POJO定义来解析搜索结果吗?
  • 还有以上工作场景的任何可能工作流程以及所需的工具(我是solrj的新手)?

阅读 265

收藏
2020-07-27

共1个答案

小编典典

为Solr映射POJO

为此,您需要使用org.apache.solr.client.solrj.beans.Field-Annotation 注释POJO的字段/访问方法。

当然,这些字段需要通过它们的名称直接匹配,也可以通过在Field批注中提供名称将Solr指向的名称来匹配schema.xml的字段。

例如,您fields在schema.xml中具有以下定义

<fields>
  <field name="id"    type="int"    indexed="true" stored="true" multiValued="false" />
  <field name="title" type="string" indexed="true" stored="true" multiValued="false" />
</fields>

然后你会有一个像这样的POJO

import org.apache.solr.client.solrj.beans.Field;

public class SampleDocument {

    public SampleDocument() {
        // required for solrj to make an instance
    }

    public SampleDocument(int id, String title) {
        this.id = id;
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    @Field("title")
    public void setTitle(String title) {
        this.title = title;
    }

}

使用POJO更新Solr的索引

索引这些POJO的代码非常简单。您可以将solrj的SolrServer用于此目的。

// connect to your solr server
SolrServer server = new HttpSolrServer("http://HOST:8983/solr/");

// adding a single document
SampleDocument document = new SampleDocument(1, "title 1");
server.addBean(document);

// adding multiple documents
List<SampleDocument> documents = Arrays.asList(
        new SampleDocument(2, "title 2"), 
        new SampleDocument(3, "title 3"));
server.addBeans(documents);

// commit changes
server.commit();

// query solr for something
QueryResponse response = server.query(new SolrQuery("*:*"));
// get the response as List of POJO type
List<SampleDocument> foundDocuments = response.getBeans(SampleDocument.class);

进一步阅读

结果是我们的代码和以下参考文献的写照

2020-07-27