SolrJ 常用增删查

Solr搜索引擎一般是只会进行增删查,对于Solr的数据结构,可以理解为类似MongoDB的类型的数据库。

与MonogoDB的Schema Free不同。

Solr还是需要自己定义字段,并且做一些设置的。

 

而Solr一般在修改索引的时候,会选择全量更新,所以一般不会有单条索引的更新操作。

 

SolrJ添加索引:

public class SolrJAdd {

	public static void main(String[] args) {
		String urlString = "http://localhost:8983/solr";
		SolrServer solr = new HttpSolrServer(urlString);
		SolrInputDocument document = new SolrInputDocument();
		document.addField("id", "552199");
		document.addField("name", "Gouda cheese wheel");
		document.addField("price", "49.99");
		document.addField("weight", 147);
		
		//add an array field 针对 multivalue字段
		String[] features = {"yellow","salty","hard"} ;
		document.addField("features", features);
		try {
			UpdateResponse response = solr.add(document);
			// Remember to commit your changes!
			solr.commit();
			System.out.println("commit!");
		} catch (SolrServerException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
}

 

SolrJ删除索引

public class SolrJDelete {

	public static void main(String[] args) {
		String urlString = "http://localhost:8983/solr";
		SolrServer solr = new HttpSolrServer(urlString);
		
		 
		try {
			//删除查询到的索引信息
			solr.deleteByQuery("id:552199");
			solr.commit(true, true);
			
			System.out.println("delete success!");
		} catch (SolrServerException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

SolrJ查询索引: 

public class SolrJSearcher {

	public static void main(String[] args) throws SolrServerException {
		String urlString = "http://localhost:8983/solr";
		HttpSolrServer solr = new HttpSolrServer(urlString);

		SolrQuery query = new SolrQuery();
		//添加查询
		query.setQuery("cat:music");
		
		//添加过滤条件
		query.addFilterQuery("price:[50 TO 400]");
		
		// 排序
		query.addSort("id", ORDER.asc);
        
		// 分页:start开始页,rows每页显示记录条数
		query.setStart(0);
		query.setRows(20);
        
		// 设置高亮
		query.setHighlight(true); // 开启高亮组件
		query.addHighlightField("name");// 高亮字段
		query.setHighlightSimplePre("<font color='red'>");
        // 标记,高亮关键字前缀
		query.setHighlightSimplePost("</font>");
		
		QueryResponse response = solr.query(query);
		SolrDocumentList docs = response.getResults();
		System.out.println("文档个数:" + docs.getNumFound());
		System.out.println("查询时间:" + response.getQTime());
		for (SolrDocument doc : docs) {
			System.out.println(doc.getFieldNames());
			System.out.println("id: " + doc.getFieldValue("id"));
			System.out.println("price: " + doc.getFieldValue("price"));
			System.out.println("name: " + doc.getFieldValue("name"));
			System.out.println();
		}
	}
}

 

SolrJ Facet查询:

public class SolrJFacetSearch {

	public static void main(String[] args) {
		String urlString = "http://localhost:8983/solr";
		SolrServer solr = new HttpSolrServer(urlString);
		
		SolrQuery query = new SolrQuery();
		//Facet为solr中的层次分类查询
        //分片信息
		query.setFacet(true)
            .setQuery("*:*")
            .setFacetMinCount(1)
            .setFacetLimit(5)//段
            //.setFacetPrefix("electronics", "cat")
            .setFacetPrefix("cor")//查询manu、name中关键字前缀是cor的
            .addFacetField("manu")
            .addFacetField("name");//分片字段
		
		
		try {
			QueryResponse response = solr.query(query);

			// 输出查询结果集
			SolrDocumentList list = response.getResults();
			System.out.println("Query result nums: " + list.getNumFound());

			for (int i = 0; i < list.size(); i++) {
				//SolrDocument
				System.out.println(list.get(i));
			}

			System.out.println("All facet filed result: ");
			// 输出分片信息
			List<FacetField> facets = response.getFacetFields();
			for (FacetField facet : facets) {
				System.out.println(facet);
				List<Count> facetCounts = facet.getValues();
				for (FacetField.Count count : facetCounts) {
					// 关键字 - 出现次数
					System.out.println(count.getName() + ": "
							+ count.getCount());
				}
			}

			System.out.println("Search facet [name] filed result: ");
			// 输出分片信息
			FacetField facetField = response.getFacetField("name");
			List<Count> facetFields = facetField.getValues();
			for (Count count : facetFields) {
				// 关键字 - 出现次数
				System.out.println(count.getName() + ": " + count.getCount());
			}
		} catch (SolrServerException e) {
			e.printStackTrace();
		}
	}
}

 

 Refer to:http://www.blogjava.net/hoojo/archive/2011/10/21/361747.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尝试回答您的问题。 首先,要生成CloudSolrClient的增删代码,需要进行以下步骤: 1. 导入所需的依赖库。 在代码中需要导入solrj库,代码如下: ```java import org.apache.solr.client.solrj.impl.CloudSolrClient; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.params.ModifiableSolrParams; import java.io.IOException; import java.util.HashMap; import java.util.Map; ``` 2. 创建CloudSolrClient对象并设置连接参数。 初始化CloudSolrClient对象需要指定Solr地址,以及ZooKeeper的地址信息。具体代码如下: ```java Map<String, String> zkHosts = new HashMap<>(); zkHosts.put("zkHosts", "localhost:2181/solr"); CloudSolrClient cloudSolrClient = new CloudSolrClient.Builder(new ArrayList<>(zkHosts.values()), Optional.empty()).build(); //设置默认的Collection名称 cloudSolrClient.setDefaultCollection("collection_name"); ``` 3. 增加文档。 添加文档到索引需要创建SolrInputDocument对象,然后使用IndexRequest操作,如下: ```java SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", "doc_id"); doc.addField("title", "doc_title"); doc.addField("content", "doc_content"); UpdateRequest addRequest = new UpdateRequest(); addRequest.add(doc); cloudSolrClient.request(addRequest); cloudSolrClient.commit(); ``` 4. 更新文档。 更新需要使用UpdateRequest对象,具体代码如下: ```java SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", "doc_id"); doc.addField("title", "doc_title_updated"); UpdateRequest updateRequest = new UpdateRequest(); updateRequest.add(doc); cloudSolrClient.request(updateRequest); cloudSolrClient.commit(); ``` 5. 删除文档。 删除文档需要使用deleteByQuery或者deleteById方法,具体代码如下: ```java //使用deleteByQuery方法删除文档 DeleteRequest deleteRequest = new DeleteRequest(); deleteRequest.deleteById("doc_id"); ``` ```java //使用deleteById方法删除文档 DeleteRequest deleteRequest = new DeleteRequest(); deleteRequest.deleteByQuery("id:doc_id"); ``` 6. 询文档。 可以使用SolrQuery对象进行询,具体代码如下: ```java SolrQuery query = new SolrQuery(); query.setQuery("id:doc_id"); QueryResponse response = cloudSolrClient.query(query); SolrDocumentList results = response.getResults(); ``` 以上是生成CloudSolrClient的增删代码的主要步骤。但具体实现方法还需要根据实际需求进行改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值