solrJ
package solr;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.FacetField;
import org.apache.solr.client.solrj.response.Group;
import org.apache.solr.client.solrj.response.GroupCommand;
import org.apache.solr.client.solrj.response.GroupResponse;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.FacetField.Count;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.GroupParams;
import org.junit.Test;
/**
* managed-schema文件定義的自段:其中foodName使用ik分詞
<field name="foodId" type="int" indexed="false" stored="true"/>
<field name="foodName" type="text_ik" indexed="true" stored="true"/>
<field name="price" type="int" indexed="false" stored="true"/>
<field name="typeName" type="string" indexed="true" stored="true"/>
測試數據:
id foodName price foodType
1 青椒炒蛋 10 湘菜
2 麻辣豆腐 12 川菜
3 蝦仁炒蛋 25 粵菜
4 臭豆腐 15 湘菜
*/
public class TestSolrJ {
// 請求的url
static String urlString = "http://localhost:8080/solr/core2";
static SolrClient solr;
static {
solr = new HttpSolrClient(urlString);
}
@Test
public void write() throws SolrServerException, IOException {
// 創建document
SolrInputDocument document = new SolrInputDocument();
// 添加field
document.addField("id", "4");
document.addField("foodId", "4");
document.addField("foodName", "蝦仁炒蛋");
document.addField("price", "25");
document.addField("typeName", "粵菜");
// 添加document到索引庫
solr.add(document);
solr.commit();
solr.close();
}
@Test
public void read() throws SolrServerException, IOException {
SolrQuery solrQuery = new SolrQuery();
// 指定查詢條件,該方法和SolrQuery的構造器傳入參數效果等同
solrQuery.setQuery("*:*");
// 過濾:對查詢出來的結果進行篩選--指定查詢的條件,與得分無關
solrQuery.setFilterQueries("foodName:炒蛋");
// 排序
solrQuery.setSort("id", ORDER.desc);
// 分頁:開始索引,索引從0開始
solrQuery.setStart(0);
// 指定返回的document個數--總行數
solrQuery.setRows(2);
// 對查詢的條件進行綁定
QueryResponse query = solr.query(solrQuery);
// 返回查詢的數據(document)
SolrDocumentList results = query.getResults();
// 遍歷數據
for (SolrDocument solrDocument : results) {
System.out.println(solrDocument.getFieldValue("id"));
System.out.println(solrDocument.getFieldValue("foodName"));
System.out.println(solrDocument.getFieldValue("price"));
System.out.println(solrDocument.getFieldValue("typeName"));
}
solr.close();
}
@Test // 高亮不能使用過濾FilterQueries
public void readHighlighting() throws SolrServerException, IOException {
SolrQuery solrQuery = new SolrQuery();
// 指定查詢條件,該方法和SolrQuery的構造器傳入參數效果等同
solrQuery.setQuery("foodName:炒蛋");
// 排序
solrQuery.setSort("id", ORDER.desc);
// 分頁:開始索引,索引從0開始
solrQuery.setStart(0);
// 指定返回的document個數--總行數
solrQuery.setRows(2);
// 開啓高亮
solrQuery.setHighlight(true);
// 指定高亮的條件
solrQuery.addHighlightField("foodName");
// 效果等同---solrQuery.set("hl.fl", "foodName");
// --solrQuery.set(HighlightParams.FIELDS, "foodName");
// 設置高亮的樣式
solrQuery.setHighlightSimplePre("<font color=red>");
solrQuery.setHighlightSimplePost("</font>");
// 對查詢的條件進行綁定
QueryResponse query = solr.query(solrQuery);
// 返回查詢的數據(document)
SolrDocumentList results = query.getResults();
// 返回高亮數據
Map<String, Map<String, List<String>>> highlighting = query.getHighlighting();
// 遍歷數據
for (SolrDocument solrDocument : results) {
String id = solrDocument.getFieldValue("id").toString();
// 根據id獲取高亮的數據集合
Map<String, List<String>> map = highlighting.get(id);
List<String> list = map.get("foodName");
String hlString = list.get(0);
System.out.println(hlString);
}
solr.close();
}
@Test
public void deleteById() throws SolrServerException, IOException {
// 根據id來刪除數據
solr.deleteById("1");
solr.commit();
solr.close();
}
@Test
public void deleteByCondition() throws SolrServerException, IOException {
// 根據條件來刪除數據
solr.deleteByQuery("foodName:青椒");
solr.commit();
solr.close();
}
@Test
public void facet() throws SolrServerException, IOException {
SolrQuery solrQuery = new SolrQuery("foodName:炒蛋");
solrQuery.setFacet(true); // 開啓分類
solrQuery.setRows(0);
solrQuery.addFacetField("typeName"); // 按字段分類 相同的歸於一類
solrQuery.setFacetLimit(10);// 限制facet返回的數量
solrQuery.setFacetMissing(false);// 不統計null的值
solrQuery.setFacetMinCount(1);// 設置返回的數據中每個分組的數據最小值,比如設置爲1,則統計數量最小爲1,不然不顯示
// solrQuery.setFacetSort("count asc"); //根據 count 數量 升序和降序 也可以根據索引
// 默認是降序
QueryResponse query = solr.query(solrQuery); // 對查詢的條件進行綁定
// System.out.println("查詢時間:" + query.getQTime());
List<FacetField> facets = query.getFacetFields();// 返回的facet列表
for (FacetField facet : facets) {
System.out.println(facet.getName());// 獲取分組的條件--typeName
List<Count> counts = facet.getValues();
for (Count count : counts) {
// 打印分組的結果和數量
System.out.println(count.getName() + ":" + count.getCount());
}
}
solr.close();
}
@Test
public void GroupFieldQuery() throws Exception {
SolrQuery solrQuery = new SolrQuery("foodName:炒蛋");
// 開啓group功能
solrQuery.setParam(GroupParams.GROUP, true);
// 指定group條件
solrQuery.setParam(GroupParams.GROUP_FIELD, "typeName");
// solrQuery.setParam("group.ngroups", true); --開啓分組統計
// 設置獲取的數據數量,默認只獲取分組中的第一條
solrQuery.setParam(GroupParams.GROUP_LIMIT, "5");
// 分頁
solrQuery.setStart(0);
solrQuery.setRows(5);
QueryResponse query = solr.query(solrQuery);
GroupResponse groupResponse = query.getGroupResponse();
List<GroupCommand> groupList = groupResponse.getValues();
for (GroupCommand groupCommand : groupList) {
System.out.println(groupCommand.getName()); // 獲取group的條件
List<Group> groups = groupCommand.getValues();
for (Group group : groups) {
SolrDocumentList results = group.getResult();
// System.out.println(group.getGroupValue()+"-------"+results.size());
// 獲取group的結果和數量
System.out.println(group.getGroupValue() + "====" + group.getResult().getNumFound());
for (SolrDocument doc : results) {
// 獲取group後的數據內容,可以獲取到document中的所有屬性(field)
System.out.println(doc.getFieldValue("foodName") + ":" + doc.getFieldValue("typeName") + ":" + doc.getFieldValue("price"));
}
}
}
solr.close();
}
}
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.FacetField;
import org.apache.solr.client.solrj.response.Group;
import org.apache.solr.client.solrj.response.GroupCommand;
import org.apache.solr.client.solrj.response.GroupResponse;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.FacetField.Count;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.GroupParams;
import org.junit.Test;
/**
* managed-schema文件定義的自段:其中foodName使用ik分詞
<field name="foodId" type="int" indexed="false" stored="true"/>
<field name="foodName" type="text_ik" indexed="true" stored="true"/>
<field name="price" type="int" indexed="false" stored="true"/>
<field name="typeName" type="string" indexed="true" stored="true"/>
測試數據:
id foodName price foodType
1 青椒炒蛋 10 湘菜
2 麻辣豆腐 12 川菜
3 蝦仁炒蛋 25 粵菜
4 臭豆腐 15 湘菜
*/
public class TestSolrJ {
// 請求的url
static String urlString = "http://localhost:8080/solr/core2";
static SolrClient solr;
static {
solr = new HttpSolrClient(urlString);
}
@Test
public void write() throws SolrServerException, IOException {
// 創建document
SolrInputDocument document = new SolrInputDocument();
// 添加field
document.addField("id", "4");
document.addField("foodId", "4");
document.addField("foodName", "蝦仁炒蛋");
document.addField("price", "25");
document.addField("typeName", "粵菜");
// 添加document到索引庫
solr.add(document);
solr.commit();
solr.close();
}
@Test
public void read() throws SolrServerException, IOException {
SolrQuery solrQuery = new SolrQuery();
// 指定查詢條件,該方法和SolrQuery的構造器傳入參數效果等同
solrQuery.setQuery("*:*");
// 過濾:對查詢出來的結果進行篩選--指定查詢的條件,與得分無關
solrQuery.setFilterQueries("foodName:炒蛋");
// 排序
solrQuery.setSort("id", ORDER.desc);
// 分頁:開始索引,索引從0開始
solrQuery.setStart(0);
// 指定返回的document個數--總行數
solrQuery.setRows(2);
// 對查詢的條件進行綁定
QueryResponse query = solr.query(solrQuery);
// 返回查詢的數據(document)
SolrDocumentList results = query.getResults();
// 遍歷數據
for (SolrDocument solrDocument : results) {
System.out.println(solrDocument.getFieldValue("id"));
System.out.println(solrDocument.getFieldValue("foodName"));
System.out.println(solrDocument.getFieldValue("price"));
System.out.println(solrDocument.getFieldValue("typeName"));
}
solr.close();
}
@Test // 高亮不能使用過濾FilterQueries
public void readHighlighting() throws SolrServerException, IOException {
SolrQuery solrQuery = new SolrQuery();
// 指定查詢條件,該方法和SolrQuery的構造器傳入參數效果等同
solrQuery.setQuery("foodName:炒蛋");
// 排序
solrQuery.setSort("id", ORDER.desc);
// 分頁:開始索引,索引從0開始
solrQuery.setStart(0);
// 指定返回的document個數--總行數
solrQuery.setRows(2);
// 開啓高亮
solrQuery.setHighlight(true);
// 指定高亮的條件
solrQuery.addHighlightField("foodName");
// 效果等同---solrQuery.set("hl.fl", "foodName");
// --solrQuery.set(HighlightParams.FIELDS, "foodName");
// 設置高亮的樣式
solrQuery.setHighlightSimplePre("<font color=red>");
solrQuery.setHighlightSimplePost("</font>");
// 對查詢的條件進行綁定
QueryResponse query = solr.query(solrQuery);
// 返回查詢的數據(document)
SolrDocumentList results = query.getResults();
// 返回高亮數據
Map<String, Map<String, List<String>>> highlighting = query.getHighlighting();
// 遍歷數據
for (SolrDocument solrDocument : results) {
String id = solrDocument.getFieldValue("id").toString();
// 根據id獲取高亮的數據集合
Map<String, List<String>> map = highlighting.get(id);
List<String> list = map.get("foodName");
String hlString = list.get(0);
System.out.println(hlString);
}
solr.close();
}
@Test
public void deleteById() throws SolrServerException, IOException {
// 根據id來刪除數據
solr.deleteById("1");
solr.commit();
solr.close();
}
@Test
public void deleteByCondition() throws SolrServerException, IOException {
// 根據條件來刪除數據
solr.deleteByQuery("foodName:青椒");
solr.commit();
solr.close();
}
@Test
public void facet() throws SolrServerException, IOException {
SolrQuery solrQuery = new SolrQuery("foodName:炒蛋");
solrQuery.setFacet(true); // 開啓分類
solrQuery.setRows(0);
solrQuery.addFacetField("typeName"); // 按字段分類 相同的歸於一類
solrQuery.setFacetLimit(10);// 限制facet返回的數量
solrQuery.setFacetMissing(false);// 不統計null的值
solrQuery.setFacetMinCount(1);// 設置返回的數據中每個分組的數據最小值,比如設置爲1,則統計數量最小爲1,不然不顯示
// solrQuery.setFacetSort("count asc"); //根據 count 數量 升序和降序 也可以根據索引
// 默認是降序
QueryResponse query = solr.query(solrQuery); // 對查詢的條件進行綁定
// System.out.println("查詢時間:" + query.getQTime());
List<FacetField> facets = query.getFacetFields();// 返回的facet列表
for (FacetField facet : facets) {
System.out.println(facet.getName());// 獲取分組的條件--typeName
List<Count> counts = facet.getValues();
for (Count count : counts) {
// 打印分組的結果和數量
System.out.println(count.getName() + ":" + count.getCount());
}
}
solr.close();
}
@Test
public void GroupFieldQuery() throws Exception {
SolrQuery solrQuery = new SolrQuery("foodName:炒蛋");
// 開啓group功能
solrQuery.setParam(GroupParams.GROUP, true);
// 指定group條件
solrQuery.setParam(GroupParams.GROUP_FIELD, "typeName");
// solrQuery.setParam("group.ngroups", true); --開啓分組統計
// 設置獲取的數據數量,默認只獲取分組中的第一條
solrQuery.setParam(GroupParams.GROUP_LIMIT, "5");
// 分頁
solrQuery.setStart(0);
solrQuery.setRows(5);
QueryResponse query = solr.query(solrQuery);
GroupResponse groupResponse = query.getGroupResponse();
List<GroupCommand> groupList = groupResponse.getValues();
for (GroupCommand groupCommand : groupList) {
System.out.println(groupCommand.getName()); // 獲取group的條件
List<Group> groups = groupCommand.getValues();
for (Group group : groups) {
SolrDocumentList results = group.getResult();
// System.out.println(group.getGroupValue()+"-------"+results.size());
// 獲取group的結果和數量
System.out.println(group.getGroupValue() + "====" + group.getResult().getNumFound());
for (SolrDocument doc : results) {
// 獲取group後的數據內容,可以獲取到document中的所有屬性(field)
System.out.println(doc.getFieldValue("foodName") + ":" + doc.getFieldValue("typeName") + ":" + doc.getFieldValue("price"));
}
}
}
solr.close();
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.