您的位置:首页 > 其它

使用SolrJ创建索引

2016-12-21 15:07 330 查看
Solr 是一个独立的企业级搜索应用服务器,它对外提供类似于 Web-service 的 API 接口。用户可以通过 http请求,向搜索引擎服务器提交一定格式的 XML 文件,生成索引;也可以通过 Http
Get 操作提出查找请求,并得到XML 格式的返回结果。所以我们可以使用httpClient作为客户端向solr服务器添加索引,但是幸运的是,solr为我们提供专门的客户端jar包,solrj,我们可以使用该jar包向solr服务器提交索引。

首先我们导入相关的包,相关的jar包可以通过下载的solr的压缩包中获取,其中包括:

1.dist/solrj-lib

2.dist/solr-solrj-*.jar

把这些jar包导入到classpath中,我们就可以开始使用solrj了。

HttpSolrServer

HttpSolrServer是用于连接solr服务器的类,它的底层实现是依赖apache 的 httpclient 的,下面是连接服务器的具体代码:

[java] view
plain copy

 





String url = "http://localhost:8080/solr";  

HttpSolrServer server = new HttpSolrServer(url);  

server.setMaxRetries(1); // defaults to 0. > 1 not recommended.  

server.setConnectionTimeout(5000); // 5 seconds to establish TCP  

// Setting the XML response parser is only required for cross  

// version compatibility and only when one side is 1.4.1 or  

// earlier and the other side is 3.1 or later.  

server.setParser(new XMLResponseParser()); // binary parser is used by  

                                            // default  

// The following settings are provided here for completeness.  

// They will not normally be required, and should only be used  

// after consulting javadocs to know whether they are truly required.  

server.setSoTimeout(1000); // socket read timeout  

server.setDefaultMaxConnectionsPerHost(100);  

server.setMaxTotalConnections(100);  

server.setFollowRedirects(false); // defaults to false  

// allowCompression defaults to false.  

// Server side must support gzip or deflate for this to have any effect.  

server.setAllowCompression(true);  


EmbeddedSolrServer

另外,solrj提供另外一种不通过http连接solr的方式,直接通过在本地访问文件的方式连接solr服务。

[java] view
plain copy

 





// Note that the following property could be set through JVM level arguments too  

 System.setProperty("solr.solr.home", "/home/shalinsmangar/work/oss/branch-1.3/example/solr");  

 CoreContainer.Initializer initializer = new CoreContainer.Initializer();  

 CoreContainer coreContainer = initializer.initialize();  

 EmbeddedSolrServer server = new EmbeddedSolrServer(coreContainer, "");  

如果使用了多个core,可以通过下面的方式。

[java] view
plain copy

 





File home = new File( "/path/to/solr/home" );  

File f = new File( home, "solr.xml" );  

CoreContainer container = new CoreContainer();  

container.load( "/path/to/solr/home", f );  

  

EmbeddedSolrServer server = new EmbeddedSolrServer( container, "core name as defined in solr.xml" );  

向solr服务器添加数据
连接成功后,我们可以使用server进行数据的提交。

[java] view
plain copy

 





SolrInputDocument doc1 = new SolrInputDocument();  

doc1.addField( "id", "333333333333333", 1.0f );  

doc1.addField( "name", "3333333333333333333", 1.0f );  

doc1.addField( "price", 10 );  

server.add(doc1);  

server.commit();  

提交成功后,可以通过solr admin查看索引是否增加了,但是最简单的方式就是调用查询方法,查询一下。

[java] view
plain copy

 





SolrQuery solrQuery = new SolrQuery();  

solrQuery.setQuery("q=3333333333333333333");  

QueryResponse queryResponse= server.query(solrQuery);     

System.out.println(queryResponse.getResults().get(0).getFieldValue("name"));  

向solr服务添加pojo的数据

首先我们需要新建一个Java bean。

[java] view
plain copy

 





public class Item {  

      

    @Field  

    private String id;  

      

    @Field  

    private String category;  

  

    @Field  

    private List<String> features;  

  

    public String getId() {  

        return id;  

    }  

  

    public void setId(String id) {  

        this.id = id;  

    }  

  

    public String getCategory() {  

        return category;  

    }  

  

    public void setCategory(String category) {  

        this.category = category;  

    }  

  

    public List<String> getFeatures() {  

        return features;  

    }  

      

    public void setFeatures(List<String> features) {  

        this.features = features;  

    }  

      

}  

向solr添加数据。

[java] view
plain copy

 





Item item = new Item();  

item.setId("201404300001");  

item.setCategory("category");  

item.setFeatures(Arrays.asList("feature1","feature2","feature3"));  

server.addBean(item);  

server.commit();  

搜索一下,验证是否添加成功。

[java] view
plain copy

 





SolrQuery solrQuery = new SolrQuery();  

solrQuery.setQuery("q=feature1");  

QueryResponse queryResponse= server.query(solrQuery);     

List<Item> items = queryResponse.getBeans(Item.class);  

System.out.println(items.get(0).getCategory());  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: