一、在solr中插入資料
{
"id": 536563,
"tb_item_cid": 560,
"tb_item_cname": "手機",
"tb_item_title": "new2 - 阿爾卡特 (OT-927) 炭黑 聯通3G手機 雙卡雙待",
"tb_item_sell_point": "清倉!僅北京,武漢倉有貨!"
}
在solr中插入的資料,這些資料的字段都需要在solr中進行“注冊”,被“注冊”過的字段,就可以支援分詞,是以這些資料就可以被查詢。
1.在solr中“注冊”字段
1)搜尋出來以後的資料是什麼樣的,這樣的資料才會存入到solr中
搜尋出來的資料主需要有部分字段,
是以,通過設計一個專門用于存放solr中的資料的模型(javabean),來先擷取這樣的所有的資料,然後再存到solr裡。
2)設計javabean
商品id
商品名稱
商品實際售價
商品圖檔
商品描述
3)根據javabean中的屬性設計sql語句
SELECT
a.pid as id,
a.pname as t_product_name,
a.sale_price as t_product_sale_price,
a.pimage as t_product_pimage,
b.pdesc as t_product_pdesc
FROM
t_product a
LEFT JOIN t_product_desc b
ON a.pid = b.
pid
4)在solr中注冊字段
編輯ik配置檔案: managed_schema
讓配置檔案在容器中生效
複制到容器
docker cp managed-schema solr:/opt/solr/server/solr/ik_core/conf
重新開機容器
docker-compose restart
5)在solr的浏覽器用戶端中插入資料
6)查詢資料
7)删除資料
根據查詢結果删除
根據id來删除
二、在springboot中使用solr實作增删改查
1.添加依賴
org.springframework.boot
spring-boot-starter-data-solr
yml:
spring:
data:
solr:
host:
http://192.168.2.143:8983/solr/ik_core2.編寫javabean
3.往solr中插入資料
@Autowired
private TProductSearchDTOMapper mapper;
private SolrClient solrClient;
//将資料庫中擷取的資料,插入到solr庫中
@Test
public void insertDataToSolr() throws IOException, SolrServerException {
//1.擷取資料庫中的資料
List products = mapper.selectAll();
//2.将資料插入到solr
//用于存放所有solr資料的集合
List documents = new ArrayList<>();
//封裝Document對象
for (TProductSearchDTO product : products) {
SolrInputDocument document = new SolrInputDocument();
document.addField("id",product.getId());
document.addField("t_product_name",product.gettProductName());
document.addField("t_product_sale_price",product.gettProductSalePrice().floatValue());
document.addField("t_product_pimage",product.gettProductPimage());
document.addField("t_product_pdesc",product.gettProductPdesc());
//存入到集合中
documents.add(document);
}
//送出給solr用戶端
solrClient.add(documents);
//commit
solrClient.commit();
4.在solr中查詢資料
1)普通的查詢并封裝
private SolrClient solrClient;
//查詢solr庫
@Test
public void testQueryFromSolr() throws IOException, SolrServerException {
// String keyword = "t_product_name:手機"; //指定字段查詢
//複制域查詢
String keyword = "手機";
//建立查詢對象
SolrQuery query = new SolrQuery();
//往對象中設定參數
query.set("df","t_product_keywords");//複制域查詢
query.setQuery(keyword);
query.setStart(0);
query.setRows(10);
//高亮
query.addHighlightField("t_product_name");
query.setHighlight(true);
query.setHighlightSimplePre("");
query.setHighlightSimplePost("");
//執行查詢.得到響應結果
QueryResponse response = solrClient.query(query);
// System.out.println(response);
//封裝結果集==> List
List products = new ArrayList<>();
SolrDocumentList results = response.getResults();
for (SolrDocument document : results) {
TProductSearchDTO product = new TProductSearchDTO();
Long id = Long.parseLong((String) document.getFieldValue("id"));
product.setId(id);
String t_product_name = (String) document.getFieldValue("t_product_name");
product.settProductName(t_product_name);
Float t_product_sale_price = (Float) document.getFieldValue("t_product_sale_price");
product.settProductSalePrice(new BigDecimal(t_product_sale_price));
String t_product_pimage = (String) document.getFieldValue("t_product_pimage");
product.settProductPimage(t_product_pimage);
String t_product_pdesc = (String) document.getFieldValue("t_product_pdesc");
product.settProductPdesc(t_product_pdesc);
products.add(product);
}
System.out.println(products);
2)帶高亮的查詢并封裝
@Autowired
//獲得資料結果集
//獲得高亮結果集
Map>> highlighting = response.getHighlighting();
String stringId = (String) document.getFieldValue("id");
Long id = Long.parseLong(stringId );//89983
//==========從高亮結果集中那帶高亮效果的t_product_name=============
Map> stringListMap = highlighting.get(stringId);
List t_product_name1 = stringListMap.get("t_product_name");
String t_product_name = t_product_name1.get(0);
product.settProductPimage(t_product_pimage);
5.在solr中删除資料