一:solr的通用知识:
添加:添加一个json格式的文件就可以。
修改:在solr中没有update,只需要添加一个新的文档,要求文档id和被修改文档的id一致。原理是先删除后添加。
删除:使用xml格式。
删除两种方法:
1、根据id删除:
<delete>
<id>test001</id>
</delete>
<commit/>
2、根据查询删除:
<delete>
<query>*:*</query>
</delete>
二:solrJ客户端的使用
1:添加maven依赖:(可以根据自己的solr的版本选择solrJ的版本)
<!-- solr客户端的依赖 -->
<!-- https://mvnrepository.com/artifact/org.apache.solr/solr-solrj -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.3</version>
</dependency>
测试代码:
package solrTest;
import java.util.HashMap;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.junit.Test;
public class SolrTest {
@Test
public void addDocument() throws Exception {
//创建一连接
SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr");
//创建一个文档对象
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "test001");
document.addField("name", "测试商品2");
//把文档对象写入索引库
solrServer.add(document);
//提交
solrServer.commit();
}
@Test
public void deleteDocument() throws Exception {
//创建一连接
SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr");
//solrServer.deleteById("test001");
solrServer.deleteByQuery("*:*");
solrServer.commit();
}
@Test
public void queryDocument() throws Exception {
SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr");
//创建一个查询对象
SolrQuery query = new SolrQuery();
//设置查询条件
query.setQuery("*:*");
query.setStart(0);
query.setRows(50);
//执行查询
QueryResponse response = solrServer.query(query);
//取查询结果
SolrDocumentList solrDocumentList = response.getResults();
System.out.println("共查询到记录:" + solrDocumentList.getNumFound());
for (SolrDocument solrDocument : solrDocumentList) {
System.out.println(solrDocument.get("id"));
}
}
}
solr的搜索语句:对于solr的的多条件查询跟数据库的查询是很类似的,也是一些条件的拼接
下面给出实例代码:
@Test
public void queryProduct(String productType,String color, Float minPrice, Float maxPrice) throws SolrServerException {
SolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr");
// 创建查询对象
SolrQuery solrQuery = new SolrQuery();
// 创建组合条件串
StringBuilder params = new StringBuilder("productType:" + productType);
// 组合商品颜色条件
if (color != null) {
params.append(" AND color:" + color);
}
// 组合价格区间条件
if (minPrice.intValue() != 0 || maxPrice != 0) {
params.append(" AND spPrice:[" + minPrice + " TO "
+ maxPrice + "]");
}
solrQuery.setQuery(params.toString());
// 执行查询并获取查询数据
QueryResponse queryResponse = solrServer.query(solrQuery);
//List<Product> products = queryResponse.getBeans(Product.class);
SolrDocumentList solrDocumentList = queryResponse.getResults();
System.out.println("共查询到记录:" + solrDocumentList.getNumFound());
for (SolrDocument solrDocument : solrDocumentList) {
System.out.println(solrDocument.get("id"));
}
}
题外话:如果项目中使用到了solr,一般项目是比较大的,对性能也要求也比较高,还有可能会有多端的使用,有必要把solr的一些服务进行独立开发,给项目留出接口供调用,