solr和elasticsearch的區別「solr教程從入門到精通」

1.在虛擬機里安裝solr,可以通過官網下載solr的linux的安裝包解壓之後,添加/etc/sysconfig/iptables中的端口號8983(solr默認)
2.Solr的安裝:
第一步:解壓壓縮文件:
[root@localhost Desktop]# tar -zvxf solr-7.3.1.tgz -C /opt/
第二步:啟動solr
[root@localhost Desktop]# /opt/solr-7.3.1/bin/solr start -force
第三步:測試 在瀏覽器中輸入
http://localhost:8983/solr
如果出現AdminUI界面 正確,否則失敗
第四步:創建Admin Core
出現bug了:
修復:
[root@localhost Desktop]# cp -rf
/opt/solr-7.3.1/server/solr/configsets/_default/conf/ /opt/solr-7.3.1/server/solr/new_core/
移動配置文件到新建的new_core中
修復完成之後,重新創建new_core 則成功
3.啟動之後windows瀏覽器通過ip:8983訪問solr頁面
注意:在往solr中存數據的時候那個實體類必須有一個String類型的id字段,同時加上solr下的field註解,這樣在存入solr中的id就是數據庫里的id值

        @Field
	private String id;
	@Field
	private String sid;
	@Field
	private String sname;
	@Field
	private Double sprice;
	@Field
	@DateTimeFormat(pattern="yyyy-MM-dd")
	private Date stime;
springMVC中solr的簡單實現步驟

4.solr在spring中需要注入兩個實體類,一個是往虛擬機連接的類,一個是solr的模板類

<!-- 配置solr工廠 獲取Solr的客戶端對象 -->
    <bean id="solrClientFactory" class="org.springframework.data.solr.server.support.HttpSolrClientFactoryBean">
        <property name="url" value="http://192.168.133.131:8983/solr"/>
        <property name="timeout" value="15000"/>
        <property name="maxConnections" value="100"/>
    </bean>
   <!-- 操作solr的簡化的模版對象 -->
    <bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
        <constructor-arg index="0" ref="solrClientFactory"/> 
    </bean>
springMVC中solr的簡單實現步驟

高亮顯示:
這裡有一個solr的工具類:封裝了solr的ACDI操作

public class SolrUtil {
	//單例模式的懶漢式
	//1.私有化的靜態類屬性
	private static SolrUtil solrUtil;
	//2.私有化的構造函數
	private SolrUtil() {
	}
	//3.對外提供公共的訪問方法
	public static SolrUtil getSolrUtil(){
		if(solrUtil==null){
			return new SolrUtil();
		}
			return solrUtil;
	}
	
	private static String coreName = "new_core";
	/**
	 * 添加集合數據
	 * 
	 * @param entities
	 */
	public void initData(SolrTemplate solrTemplate,List entities) {
		solrTemplate.setSolrCore(coreName);
		solrTemplate.saveBeans(entities);
		solrTemplate.commit(coreName);
	}
	
	/**
	 * 往solr里添加數據
	 * @param solrTemplate solr的模板對象
	 * @param obj 添加的那條對象
	 */
	public void insertBean(SolrTemplate solrTemplate,Object obj) {
		solrTemplate.setSolrCore(coreName);
		solrTemplate.saveBean(obj);
		solrTemplate.commit(coreName);
	}
	
	/**
	 * 根據Id從solr中刪除一條數據
	 * @param solrTemplate
	 * @param id 要刪除的那條Id
	 */
	public void deleteBean(SolrTemplate solrTemplate,String id) {
		solrTemplate.setSolrCore(coreName);
		solrTemplate.deleteById(coreName,id);
		solrTemplate.commit(coreName);
	}
	
	/**
	 * 從solr中根據Id批量刪除數據
	 * @param solrTemplate
	 * @param ids
	 */
	public void deleteBeans(SolrTemplate solrTemplate,Collection ids) {
		solrTemplate.setSolrCore(coreName);
		solrTemplate.deleteById(coreName,ids);
		solrTemplate.commit(coreName);
	}
	
	/**
	 * 從solr中修改數據,首先根據Id刪除這條數據,在添加修改後的這條數據
	 * @param solrTemplate
	 * @param id
	 * @param obj
	 */
	public void updateBeans(SolrTemplate solrTemplate,String id,Object obj) {
		solrTemplate.setSolrCore(coreName);
		solrTemplate.deleteById(coreName,id);
		solrTemplate.saveBean(obj);
		solrTemplate.commit(coreName);
	}

	/**
	 * 查詢
	 * 從solr里查詢全部數據
	 * @param model 用來裝載數據發向前台
	 * @param solrTemplate solr模板對象,用來查詢處理solr數據
	 * @param cpage 當前頁
	 * @param pageSize 分頁單位
	 * @param mohu 要高亮查詢的字段
	 * @param clazz 往solr里用來查詢的對象的class對象 ,反射用
	 * @param fieldName 查詢高亮顯示的字段
	 * @param listdName 向前台發送集合的名稱
	 * @throws Exception
	 */
	public void selectObjects(Model model, SolrTemplate solrTemplate, Integer cpage,
			Integer pageSize, String mohu, Class clazz, String fieldName,String listName) throws Exception {
		// 聲明返回值變量
		List entities = new ArrayList<>();   
		// 計算開始記錄數
		Integer startIndex = (cpage - 1) * pageSize;
		// 設置操作core
		solrTemplate.setSolrCore(coreName);
		// 高亮查詢條件
		HighlightQuery query = new SimpleHighlightQuery();
		// 開始記錄數
		query.setOffset(startIndex);
		// 顯示條數
		query.setRows(pageSize);
		// 設置條件
		Criteria criteria = new Criteria(fieldName);
		// 判斷查詢條件是否為空
		if(mohu!="" && mohu!=null){
			if(mohu.contains(" ")){
				String[] split = mohu.split(" ");
				criteria.contains(split);
			}else if(mohu.contains(",")){
				String[] split = mohu.split(",");
				criteria.contains(split);
			}else{
				criteria.contains(mohu);
			}
		}
		// 條件條件處理
		query.addCriteria(criteria);

		// 設置高亮的參數處理對象
		HighlightOptions highlightOptions = new HighlightOptions();
		highlightOptions.addField(fieldName);
		highlightOptions.setSimplePrefix("<font color='red'>");
		highlightOptions.setSimplePostfix("</font>");
		query.setHighlightOptions(highlightOptions);

		// 執行高亮查詢
		HighlightPage highlightPage = solrTemplate.queryForHighlightPage(query, clazz);
		// 獲取總頁數
		Integer pageCount = highlightPage.getTotalPages();
		// 獲取當前頁數據
		List<HighlightEntry> highlighted = highlightPage.getHighlighted();
		// 獲取高亮對象
		for (HighlightEntry cc : highlighted) {
			Object entity = cc.getEntity();
			// 獲取高亮顯示的結果
			List<Highlight> highlights = cc.getHighlights();
			// 設置高亮顯示的值
			if (highlights != null && highlights.size() > 0 && highlights.get(0) != null
					&& highlights.get(0).getSnipplets() != null && highlights.get(0).getSnipplets().size() > 0) {
				// 獲取字段名稱
				Field field = clazz.getDeclaredField(fieldName);
				// 設置高亮處理
				field.setAccessible(true);
				field.set(entity, highlights.get(0).getSnipplets().get(0));
			}
			// 添加到集合中
			entities.add(entity);
		}

		// 存儲到model域中
		model.addAttribute("cpage", cpage);  
		model.addAttribute("pageCount", pageCount);
		model.addAttribute("mohu", mohu);
		model.addAttribute(listName, entities);
	}
}

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/250163.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-13 13:29
下一篇 2024-12-13 13:29

相關推薦

發表回復

登錄後才能評論