java - 从 Solr 中检索对象

标签 java json solr solrj

因此,我有一个基于 java 的 Web 项目,它显示从托管在不同服务器上的 3 个独立服务检索到的信息,我使用 Apache Http Client 通过 REST 检索信息JSON 中的 API,使用 Gson 库。我将 Json 转换为用于显示信息的 POJO。

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

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

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

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

所以我想知道

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

最佳答案

为 Solr 映射 POJO

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

当然,这些字段需要通过名称直接匹配 schema.xml 中的字段,或者通过在 Field 注释中提供名称来将名称指向 Solr。

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

<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);

进一步阅读

结果是我们编写的代码和以下引用资料

关于java - 从 Solr 中检索对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19114554/

相关文章:

java - Apache solr 如何索引不同的文件

solr - 如何更改 Solr 下所有数据/核心的默认位置?

ubuntu - 将 Ubuntu 14.04.5 LTS 中的 Solr 6.5.1 安装到自定义目录中

java - 如何检查ArrayList中新对象的参数?

java - 如何使用 @Autowired 字段测试通用抽象类?

python - 使用 sqlalchemy 在 SQLite 中创建 JSON 类型列

android - 在 Android 中解析 JSON-LD

javascript - angular 2 服务不调用 php 文件

java - Android ListView 未在滚动时重新绘制

java - Firebase - 在类上找不到要序列化的属性