springmvc + solr的增刪改查例項
阿新 • • 發佈:2019-02-04
1、solr的配置檔案(solr.properties)
solr.Url=http://localhost:8080/solr/student (student是例項core)
solr.maxRetries=1
solr.connectionTimeout=500
2、引入solr的配置檔案,並配置bean
<context:property-placeholder location="classpath:/jdbc.properties,classpath:/solr.properties" />
<!--定義solr的server --> <bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer"> <constructor-arg index="0" value="${solr.Url}" /> <!-- 設定響應解析器 --> <property name="parser"> <bean class="org.apache.solr.client.solrj.impl.XMLResponseParser" /> </property> <!-- 設定重試次數 --> <property name="maxRetries" value="${solr.maxRetries}" /> <!-- 建立連線的最長時間 --> <property name="connectionTimeout" value="${solr.connectionTimeout}" /> </bean>
3、建立學生實體類(注意@Field必須加上)
import org.apache.solr.client.solrj.beans.Field; public class Student { private String id; private String stu_name; private int age; private String stu_school; public String getId() { return id; } @Field public void setId(String id) { this.id = id; } public String getStu_name() { return stu_name; } @Field public void setStu_name(String stu_name) { this.stu_name = stu_name; } public int getAge() { return age; } @Field public void setAge(int age) { this.age = age; } public String getStu_school() { return stu_school; } @Field public void setStu_school(String stu_school) { this.stu_school = stu_school; } @Override public String toString() { return "Student [id=" + id + ", stu_name=" + stu_name + ", age=" + age + ", stu_school=" + stu_school + "]"; } }
4、編寫業務程式碼
import java.io.IOException; import java.util.List; import java.util.Map; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.UpdateResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.jssecco.split.solr.model.Student; @Controller @RequestMapping("/solr") public class SpringSolrController { @Autowired private HttpSolrServer httpSolrServer; /** * 測試方法 * * @param id * @return * @throws SolrServerException */ @ResponseBody @RequestMapping(value = "/getStudent") public Student getStudent(Long id) throws SolrServerException { // 建立查詢條件 SolrQuery query = new SolrQuery(); query.setQuery("id:" + id); // 查詢並返回結果 QueryResponse queryResponse = this.httpSolrServer.query(query); return (Student) queryResponse.getBeans(Student.class); } /** * 新增、修改 * * @param student * @throws SolrServerException * @throws IOException */ @ResponseBody @RequestMapping(value = "/addStudent") public void addStudent(@RequestBody Student student) throws SolrServerException, IOException { SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", student.getId()); doc.addField("stu_name", student.getStu_name()); doc.addField("age", student.getAge()); doc.addField("stu_school", student.getStu_school()); UpdateResponse response = this.httpSolrServer.add(doc); this.httpSolrServer.commit(); // 提交 System.out.println(response); } /** * 刪除 * * @param student * @throws SolrServerException * @throws IOException */ @ResponseBody @RequestMapping(value = "/delStudent") public void delStudent(@RequestBody Student student) throws SolrServerException, IOException { UpdateResponse response = this.httpSolrServer.deleteById(student.getId()); this.httpSolrServer.commit(); // 提交 System.out.println(response); } @ResponseBody @RequestMapping(value = "/searchStudentList") public void searchStudentList() throws SolrServerException { // 相當於QueryParser SolrQuery query = new SolrQuery("*:*"); query.setStart(1); query.setRows(3); QueryResponse res = this.httpSolrServer.query(query); // 可以直接查詢相應的bean物件,但是不是很常用 // 使用這種方式無法獲取總數量 List<Student> list = res.getBeans(Student.class); System.out.println("當前總數:" + list.size()); for (Student stu : list) { System.out.println(stu.getId() + "#" + stu.getStu_name() + "#" + stu.getAge() + "#" + stu.getStu_school()); } } @ResponseBody @RequestMapping(value = "/testHighlight") public void testHighlight() throws SolrServerException { // 以後引數都是通過這個物件去構造... SolrQuery solrParams = new SolrQuery(); solrParams.setQuery("stu_name:測試"); // 開啟高亮 solrParams.setHighlight(true); // 高亮顯示的格式 solrParams.setHighlightSimplePre("<font color='red'>"); solrParams.setHighlightSimplePost("</font>"); // 我需要那幾個欄位進行高亮 solrParams.setParam("hl.fl", "stu_name"); QueryResponse queryResponse = this.httpSolrServer.query(solrParams); // 返回所有的結果... SolrDocumentList documentList = queryResponse.getResults(); Map<String, Map<String, List<String>>> maplist = queryResponse.getHighlighting(); // 返回高亮之後的結果.. for (SolrDocument solrDocument : documentList) { Object id = solrDocument.get("id"); Map<String, List<String>> fieldMap = maplist.get(id); List<String> stringlist = fieldMap.get("stu_name"); System.out.println(stringlist); } } }