solr在Java中使用

2019-03-27  第三方api 部署系统 组件         公开-普
<!-- 配置SolrServer对象 -->
<!-- 单机版 -->
<bean id="httpSolrClient" class="org.apache.solr.client.solrj.impl.HttpSolrClient">
        <constructor-arg name="baseURL" value="http://192.168.25.154:8080/solr"></constructor-arg>
</bean>

    @Autowired
    private HttpSolrClient httpSolrClient;
 
评论列表

查询参数

    2019-03-27    

//创建查询对象
SolrQuery solrQuery = new SolrQuery();
//设置查询条件
solrQuery.setQuery("Pcount:数据库测试mvc");
//设置分页
solrQuery.setStart((page - 1) * rows);
//设置返回数量
solrQuery.setRows(rows);
//设置返回域
solrParams.addField("id");
solrParams.addField("screen_name");
和add效果相同
query.setFields(newString[]{“name”,”age”});//只返回docs中name,age两个field。
//设置排序
solrQuery.addSort("id", SolrQuery.ORDER.desc);
//设置默认搜素域
solrQuery.set("df", "Pcount");

//设置高亮显示
solrQuery.setHighlight(true);
solrQuery.addHighlightField("Pcount");
solrQuery.setHighlightSimplePre("<em style=\"color:red\">");
solrQuery.setHighlightSimplePost("</em>");
//根据查询条件查询索引库
QueryResponse queryResponse = solrClient.query(coreName,query);


//通过MapSolrParams方式传递参数
Map<String, String> queryParamMap = new HashMap<>();
queryParamMap.put("q", "*:*");//表示查询条件
queryParamMap.put("fl", "id,Ptitle");//要显示的内容
queryParamMap.put("sort", "id asc");//排序方式
MapSolrParams solrParams = new MapSolrParams(queryParamMap);
QueryResponse response = solrClient.query(coreName, solrParams);

处理查询结果

    2019-03-27    

//处理查询结果
SolrDocumentList solrDocumentList = response.getResults();
solrDocumentList.getNumFound();//获取查到的文档数目
for (SolrDocument document : solrDocumentList) {
    //获取某文档某一参数值
    String id = (String) document.getFirstValue("id");
}

//商品列表
List<ProductInfo> itemList = new ArrayList<>();
//取高亮显示
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
//取商品列表
for (SolrDocument solrDocument : solrDocumentList) {
    //获取循环内该文档的Pcount字段
    List<String> list = highlighting.get(solrDocument.get("id")).get("Pcount");

    if (list != null && list.size()>0) {
        title = list.get(0); //获取高亮字段
    } else {
        //没有高亮字段(该字段没有匹配)
    }
}

添加

    2019-03-27    

//新增
SolrInputDocument inputDocument = new SolrInputDocument();
inputDocument.addField("sourceType", "test");
inputDocument.addField("id", "test_big_data");
// 执行添加, 如果id相同,则执行更新操作
UpdateResponse add = solrClient.add(coreName, inputDocument);
//添加一个SolrInputDocument列表
//solrClient.add(coreName, docs)
//提交添加/更新
solrClient.commit(coreName);

删除

    2019-03-27    

//删除(方式一:基于查询)
solrClient.deleteByQuery(coreName,"*:*");
solrClient.commit(coreName);
//删除(方式二:基于唯一id)
solrClient.deleteById(coreName,"6");
solrClient.commit(coreName);

通过Java对象操作

    2019-03-29    

根据对象新增
//java对象
public static class Info {
    @Field
    public String id;
    @Field
    public String screen_name;

    public Info(String id, String screen_name) {
        this.id = id;
        this.screen_name = screen_name;
    }
}
//新增数据
Info info = new Info("4", "lala");
solrClient.addBean(coreName, info);
solrClient.commit(coreName, true, true); 
List<Info> infoList =new ArrayList<Info>();
solrClient.addBeans(coreName, info);
solrClient.commit(coreName, true, true); 
//查询数据
QueryResponse response = solrClient.query(coreName, solrParams);
List<Info> beans = response.getBeans(Info.class);
文章内容的h2标题锚点:
评论列表
查询参数
处理查询结果
添加
删除
通过Java对象操作