所以,我有一个 基于Java的Web项目 ,从3个独立的服务检索到的信息显示,托管在不同的服务器上,我使用 的Apache HTTP客户端 来获取通过在REST API信息 JSON ,使用 GSON库 。我将Json转换为用于显示信息的POJO。
现在,我想在项目中实现搜索功能,因此我将Solr安装在单独的服务器上,我想要的是:
为所有3个服务在solr服务器中索引JSON。
从Solr以我的项目中描述的POJO的形式获取搜索结果
我知道第(1)点可以通过来完成jsonRequestHandler,但是我不想编写单独的索引逻辑,我在项目中使用Solrj来提取信息。
jsonRequestHandler
所以我想知道
为此,您需要使用org.apache.solr.client.solrj.beans.Field-Annotation 注释POJO的字段/访问方法。
org.apache.solr.client.solrj.beans.Field
当然,这些字段需要通过它们的名称直接匹配,也可以通过在Field批注中提供名称将Solr指向的名称来匹配schema.xml的字段。
例如,您fields在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的代码非常简单。您可以将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);
结果是我们的代码和以下参考文献的写照