因此,我有一个基于 java 的 Web 项目,它显示从托管在不同服务器上的 3 个独立服务检索到的信息,我使用 Apache Http Client 通过 REST 检索信息JSON 中的 API,使用 Gson 库。我将 Json 转换为用于显示信息的 POJO。
现在我想在我的项目中实现搜索功能,所以我在单独的服务器上安装了 Solr,我想要的是:
为所有 3 项服务在 solr 服务器中索引 JSON。
以我项目中描述的 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/