一丶普通關鍵字查詢(代碼)
Query query = new SimpleQuery();
//匹配查詢條件
Criteria criteria = new Criteria();
//此處的is為匹配的意思,contains為包含
Criteria criteria=new Criteria("item_keywords").is(searchMap.get("keywords"));
query.addCriteria(criteria);
query.setOffset(20);//開始索引(默認0)
query.setRows(20);//每頁記錄數(默認10)
ScoredPage<TbItem> page = solrTemplate.queryForPage(query, TbItem.class);
//獲取該頁的 內容
List<集合對象類型> list = page.getContent()
-
條件 Criteria可以針對多個域,使用方法criteria.and("域名").is/contain...都可對多個域進程匹配查詢,需要注意的是每次都需要對criteria重新賦值才能起到查詢的作用,例如:
Criteria criteria = new Criteria();
Criteria criteria=new Criteria("item_keywords").is(searchMap.get("keywords"));
// 此處必須重新賦值
criteria = criteria.and("item_name").is('需要匹配的字符串')
二丶過濾查詢
-
原理:在query上邊使用add()給他再此補充一個FilterQuery
FilterQuery filterQuery = new SimpleFilterQuery();
//這是過濾條件對應的域以及對應的過濾詞
Criteria brandCriteria = new Criteria("item_brand").is(searchMap.get("brand"));
//將過濾條件設置到過濾查詢中
filterQuery.addCriteria(brandCriteria);
//將過濾查詢設置到查詢query中
query.addFilterQuery(filterQuery);-
可以針對多個域增加不同的過濾條件
-
-
對動態域的過濾查詢,動態與一般在pojo中設置為對應的map集合,因此此處對map集合操作
//對動態域
Map<String, String> specMap = (Map<String, String>) searchMap.get("spec");
for (String key : specMap.keySet()) {
FilterQuery filterQuery = new SimpleFilterQuery();
Criteria specCriteria = new Criteria("item_spec" +key).is(specMap.get(key));
filterQuery.addCriteria(specCriteria);
query.addFilterQuery(filterQuery);
三丶高亮查詢
-
代碼:
//高亮查詢
HighlightQuery query = new SimpleHighlightQuery();
//設置高亮選項
HighlightOptions highlightOptions = new HighlightOptions();
//設置高亮域
highlightOptions.addField("item_title");
//設置高亮前綴高亮后綴
highlightOptions.setSimplePrefix("<em style='color:red'>");
highlightOptions.setSimplePostfix("</em>");
//設置高亮選項
query.setHighlightOptions(highlightOptions);
//********獲取高亮結果集********
//高亮頁對象
HighlightPage<TbItem> page = solrTemplate.queryForHighlightPage(query, TbItem.class);
//高亮入口集合(每條記錄的高亮入口)
List<HighlightEntry<TbItem>> entryList = page.getHighlighted();
for (HighlightEntry<TbItem> entry : entryList) {
//獲取高亮列表(高亮域的個數)
List<HighlightEntry.Highlight> highlightList = entry.getHighlights();
for (HighlightEntry.Highlight h : highlightList) {
List<String> sns = h.getSnipplets();//每個域可能存取多值
for (String sn : sns) {
TbItem item = entry.getEntity();//獲取原,實體類
item.setTitle(sn);
}
}
}
//設置好之后獲取內容
List<集合對象類型> list = page.getContent()
四丶分組查詢
Query query = new SimpleQuery("*:*");
//按照關鍵字查詢
Criteria criteria = new Criteria("item_keywords").is(searcpMap.get("keywords"));//where..
query.addCriteria(criteria);
//設置分組選項
GroupOptions groupOptions = new GroupOptions();
groupOptions.addGroupByField("item_category");//group by ....
query.setGroupOptions(groupOptions);
//得到分組頁(一個分組頁 包含多個分組結果)
GroupPage<TbItem> page = solrTemplate.queryForGroupPage(query, TbItem.class);
//根據列得到分組結果集 在設置分組選項時 可以設置很多的分組列 所以在一處應該根據列名稱去挑選對應的分組列
GroupResult<TbItem> groupResult = page.getGroupResult("item_category");
//得到分組結果入口頁 (可以得到具體的分組數據 這里是對象)
Page<GroupEntry<TbItem>> groupEntries = groupResult.getGroupEntries();
//得到分組入口集合(數據 這里是集合)
List<GroupEntry<TbItem>> content = groupEntries.getContent();
for (GroupEntry<TbItem> entry : content) {
//字符串為分組數據
String value = entry.getGroupValue()
}
-
此處一般將最后得到的分組數據字符串存入list,返回調用的地方。
-
注意的是:此處的page,getContent()得到的為null,此處做的是一個空實現。