Solr的配置和在java中的使用
阿新 • • 發佈:2017-11-14
log 使用 star 條件 集成 poi 提交 arraylist sim
Solr是一個全局站內搜索引擎,可以快速的搜索出結果。
Solr依賴於tomcat,把Solr的war包放到tomcat中即可運行。
使用solr,需要在solr的schema.xml中配置solr與java的映射關系,便於存放數據,在schema.xml中配置如下關系。
<fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> <field name="item_title" type="text_ik" indexed="true" stored="true"/> <field name="item_sell_point" type="text_ik" indexed="true" stored="true"/> <field name="item_price" type="long" indexed="true" stored="true"/> <field name="item_image" type="string" indexed="false" stored="true" /> <field name="item_category_name" type="string" indexed="true" stored="true" /> <field name="item_desc" type="text_ik" indexed="true" stored="false" /> <field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/> <copyField source="item_title" dest="item_keywords"/> <copyField source="item_sell_point" dest="item_keywords"/> <copyField source="item_category_name" dest="item_keywords"/> <copyField source="item_desc" dest="item_keywords"/>
Solr與Spring的集成
添加支持solr客戶端的依賴
<!-- solr客戶端 --> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>4.10.3</version> </dependency>
在Spring中配置Solr的bean
<bean id="solrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer"> <constructor-arg name="baseURL" value="http://47.95.196.183:8080/solr/"></constructor-arg> </bean>
向solr中添加數據,先從數據庫中查詢出所有有用信息,然後放到solr中
//導入solrServer對象 @Autowired private SolrServer solrServer; //查詢商品列表 List<SolrItem> list = itemMapper.getItemList(); //向索引庫中添加文檔 for (SolrItem solrItem : list) { //創建文檔對象 SolrInputDocument document = new SolrInputDocument(); document.setField("id", solrItem.getId()); document.setField("item_title", solrItem.getTitle()); document.setField("item_sell_point", solrItem.getSell_point()); document.setField("item_price", solrItem.getPrice()); document.setField("item_image", solrItem.getImage()); document.setField("item_category_name", solrItem.getItem_cat_name()); document.setField("item_desc", solrItem.getItem_desc()); //向索引庫中添加文檔 solrServer.add(document); } //提交修改 solrServer.commit();
這樣,數據就全部添加到Solr中了。
從Solr中查詢數據
@Autowired private SolrServer solrServer;//導入solrServer對象 //創建查詢對象 SolrQuery solrQuery = new SolrQuery(); //設置查詢條件 //solrQuery.set("q",""); solrQuery.setQuery(queryString); //設置分頁 solrQuery.setStart((int) ((page - 1) * pageSize)); solrQuery.setRows(pageSize.intValue()); //高亮設置 solrQuery.setHighlight(true); //設置高亮顯示的域 solrQuery.addHighlightField("item_title"); //高亮顯示的前綴 solrQuery.setHighlightSimplePre("<span style=‘color:red‘>"); //高亮顯示的後綴 solrQuery.setHighlightSimplePost("</span>"); //設置默認搜區域 solrQuery.set("df", "item_keywords"); //根據查詢條件查詢索引庫 QueryResponse response = solrServer.query(solrQuery); //從response中取查詢結果 SolrDocumentList list = response.getResults(); //查詢結果list List<SolrItem> itemList = new ArrayList<>(); //遍歷查詢結果 for (SolrDocument solrDocument : list) { //創建一商品對象 SolrItem item = new SolrItem(); item.setId(Long.parseLong((String)solrDocument.get("id"))); //取高亮顯示 Map<String, Map<String, List<String>>> highlighting = response.getHighlighting(); List<String> hList = highlighting.get(solrDocument.get("id")).get("item_title"); String title = ""; //判斷是否有高亮信息 if (hList != null && hList.size() > 0) { title = hList.get(0); } else { title = (String) solrDocument.get("item_title"); } item.setTitle(title); item.setSell_point((String) solrDocument.get("item_sell_point")); item.setPrice((long) solrDocument.get("item_price")); item.setImage((String) solrDocument.get("item_image")); //添加到商品列表 itemList.add(item); }
最後,將查詢的結果放入到itemList中返回。
- 報錯信息:在solr中提示沒有item_title字段,後發現是在第一步中配置的映射關系沒有生效,仔細檢查發現是在創建classes文件夾的時候寫成了calsses導致配置沒有生效。。重新配置生效即可添加數據並調用接口。
Solr的配置和在java中的使用