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;

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>

高亮顯示:
這裡有一個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