基础内容可见solr wiki : http://wiki.apache.org/solr/Solrj
1.根据数据库对象属性创建schedule.xml中的属性字段
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/> <field name="product_id" type="string" indexed="false" stored="true" required="true" multiValued="false"/> <field name="category_attribute" type="smartCnText" indexed="true" stored="true"/> <field name="product_design" type="smartCnText" indexed="true" stored="true"/> <field name="product_material" type="smartCnText" indexed="true" stored="true"/> <field name="product_name_cn" type="smartCnText" indexed="true" stored="true"/> <field name="product_sku" type="smartCnText" indexed="true" stored="true"/> <field name="product_title" type="smartCnText" indexed="true" stored="true"/> <field name="sale_count" type="string" indexed="true" stored="true"/> <field name="create_time" type="string" indexed="false" stored="true"/> <field name="current_price" type="string" indexed="false" stored="true"/> <field name="sale_price" type="string" indexed="true" stored="true"/> <field name="market_price" type="string" indexed="true" stored="true"/> <field name="bigcate_name" type="smartCnText" indexed="true" stored="true"/> <field name="brand_name" type="smartCnText" indexed="true" stored="true"/> <field name="brand_code" type="smartCnText" indexed="true" stored="true"/> <field name="product_color" type="smartCnText" indexed="true" stored="true"/> <field name="product_size" type="smartCnText" indexed="true" stored="true"/> <field name="picture_path" type="string" indexed="false" stored="true"/> <field name="page_path" type="string" indexed="false" stored="true"/> <field name="material_art" type="smartCnText" indexed="true" stored="true"/> <field name="material_out" type="smartCnText" indexed="true" stored="true"/> <field name="material_in" type="smartCnText" indexed="true" stored="true"/> <field name="material_filter" type="smartCnText" indexed="true" stored="true"/> <field name="filter_weight" type="smartCnText" indexed="true" stored="true"/> <field name="product_keyword" type="smartCnText" indexed="true" stored="true"/> <field name="text" type="smartCnText" indexed="true" stored="true" multiValued="true"/> <field name="_version_" type="long" indexed="true" stored="true"/>
<uniqueKey>id</uniqueKey> <defaultSearchField>text</defaultSearchField> <copyField source="category_attribute" dest="text"/> <copyField source="product_design" dest="text"/> <copyField source="product_material" dest="text"/> <copyField source="product_name_cn" dest="text"/> <copyField source="product_sku" dest="text"/> <copyField source="product_title" dest="text"/> <copyField source="bigcate_name" dest="text"/> <copyField source="brand_name" dest="text"/> <copyField source="product_color" dest="text"/> <copyField source="product_size" dest="text"/> <copyField source="material_art" dest="text"/> <copyField source="material_out" dest="text"/> <copyField source="material_in" dest="text"/> <copyField source="material_filter" dest="text"/> <copyField source="filter_weight" dest="text"/> <copyField source="product_keyword" dest="text"/> <copyField source="current_price" dest="text"/>
2.使用solrj创建索引
package com.vegaga.sou.index.service.impl; import java.util.ArrayList; import java.util.List; import org.apache.solr.common.SolrInputDocument; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.vegaga.common.StringUtils; import com.vegaga.common.product.PriceUtils; import com.vegaga.domain.product.VgProduct; import com.vegaga.domain.product.VgProductDetail; import com.vegaga.domain.product.VgProductSku; import com.vegaga.service.VgProductSkuService; import com.vegaga.sou.index.service.VgProductSkuIndexService; @Service("vgProductSkuIndexService") public class VgProductSkuIndexServiceImpl implements VgProductSkuIndexService { private static final String SEARCH_PRODUCT_ID = "product_id"; /**末端分类属性名*/ private static final String SEARCH_CATEGORY_ATTRIBUTE = "category_attribute"; /**图案*/ private static final String SEARCH_PRODUCT_DESIGN = "product_design"; /**材质*/ private static final String SEARCH_PRODUCT_MATERIAL = "product_material"; /**商品名称*/ private static final String SEARCH_PRODUCT_NAME_CN = "product_name_cn"; /**商品SKU*/ private static final String SEARCH_PRODUCT_SKU = "product_sku"; /**商品标题*/ private static final String SEARCH_PRODUCT_TITLE = "product_title"; /**商品销量*/ private static final String SEARCH_SALE_COUNT = "sale_count"; /**创建时间*/ private static final String SEARCH_CREATE_TIME = "create_time"; /**当前价格*/ private static final String SEARCH_CURRENT_PRICE = "current_price"; /**卖价*/ private static final String SEARCH_SALE_PRICE = "sale_price"; /**市场价*/ private static final String SEARCH_MARKET_PRICE = "market_price"; /**商品大分类*/ private static final String SEARCH_SKU_BIGCATE_NAME = "bigcate_name"; /**品牌名称*/ private static final String SEARCH_BRAND_NAME = "brand_name"; /**品牌code*/ private static final String SEARCH_BRAND_CODE = "brand_code"; /**商品颜色*/ private static final String SEARCH_PRODUCT_COLOR = "product_color"; /**商品尺寸*/ private static final String SEARCH_PRODUCT_SIZE = "product_size"; /**商品图片路径*/ private static final String SEARCH_SKU_PICTURE_PATH = "picture_path"; /**商品页面路径*/ private static final String SEARCH_SKU_PAGE_PATH = "page_path"; private static final String SEARCH_PRODUCT_MATERIAL_ART = "material_art"; private static final String SEARCH_PRODUCT_MATERIAL_OUT = "material_out"; private static final String SEARCH_PRODUCT_MATERIAL_IN = "material_in"; private static final String SEARCH_PRODUCT_MATERIAL_FILTER = "material_filter"; private static final String SEARCH_FILTER_WEIGHT = "filter_weight"; private static final String SEARCH_PRODUCT_KEYWORD = "product_keyword"; private static final String SEARCH_PRODUCT_TEXT = "text"; VgProductSkuService vgProductSkuService; @Autowired public void setVgProductSkuService(VgProductSkuService vgProductSkuService) { this.vgProductSkuService = vgProductSkuService; } @Override public List<SolrInputDocument> addVgProductSkuIndex() { List<SolrInputDocument> documents = new ArrayList<SolrInputDocument>(); List<VgProductSku> vgProductSkus = vgProductSkuService.getAll(); if(vgProductSkus != null){ for(VgProductSku vgProductSku : vgProductSkus){ System.out.println("load"+vgProductSku); VgProduct vgProduct = vgProductSku.getVgProduct(); VgProductDetail vgProductDetail = vgProduct.getVgProductDetail(); SolrInputDocument document = new SolrInputDocument(); try{ document.addField("id", vgProductSku.getId().toString()); document.addField(SEARCH_PRODUCT_ID, vgProduct.getId().toString());//不做索引 document.addField(SEARCH_CATEGORY_ATTRIBUTE, StringUtils.nullToEmpStr(vgProduct.getCategoryAttribute())); document.addField(SEARCH_PRODUCT_DESIGN, StringUtils.nullToEmpStr(vgProduct.getDesign())); document.addField(SEARCH_PRODUCT_MATERIAL, StringUtils.nullToEmpStr(vgProduct.getMaterial())); document.addField(SEARCH_PRODUCT_NAME_CN, StringUtils.nullToEmpStr(vgProduct.getProductNameCn())); document.addField(SEARCH_PRODUCT_SKU, StringUtils.nullToEmpStr(vgProductSku.getProductSku())); document.addField(SEARCH_PRODUCT_TITLE, StringUtils.nullToEmpStr(vgProductSku.getProductSkuTitle())); document.addField(SEARCH_SALE_COUNT, StringUtils.nullToEmpStr(vgProductSku.getSaleCount())); document.addField(SEARCH_CREATE_TIME, StringUtils.nullToEmpStr(vgProductSku.getCreateTime())); document.addField(SEARCH_CURRENT_PRICE, PriceUtils.getCurrentPrice(vgProductSku).toString()); document.addField(SEARCH_SALE_PRICE, vgProductSku.getSalePrice().toString()); document.addField(SEARCH_MARKET_PRICE, vgProductSku.getMarketPrice().toString()); document.addField(SEARCH_SKU_BIGCATE_NAME, StringUtils.nullToEmpStr(vgProductSku.getSkuBigCateName())); document.addField(SEARCH_BRAND_NAME, StringUtils.nullToEmpStr(vgProductSku.getBrandName())); document.addField(SEARCH_BRAND_CODE, StringUtils.nullToEmpStr(vgProductSku.getBrandCode())); document.addField(SEARCH_PRODUCT_COLOR, StringUtils.nullToEmpStr(vgProductSku.getProductColor())); document.addField(SEARCH_PRODUCT_SIZE, StringUtils.nullToEmpStr(vgProductSku.getProductSize())); document.addField(SEARCH_SKU_PICTURE_PATH, StringUtils.nullToEmpStr(vgProductSku.getSkuPicturePath())); document.addField(SEARCH_SKU_PAGE_PATH, StringUtils.nullToEmpStr(vgProductSku.getSkuPagePath())); document.addField(SEARCH_PRODUCT_MATERIAL_ART, StringUtils.nullToEmpStr(vgProductDetail.getMaterialArt())); document.addField(SEARCH_PRODUCT_MATERIAL_OUT, StringUtils.nullToEmpStr(vgProductDetail.getMaterialOut())); document.addField(SEARCH_PRODUCT_MATERIAL_IN, StringUtils.nullToEmpStr(vgProductDetail.getMaterialIn())); document.addField(SEARCH_PRODUCT_MATERIAL_FILTER, StringUtils.nullToEmpStr(vgProductDetail.getMaterialFiller())); document.addField(SEARCH_FILTER_WEIGHT, StringUtils.nullToEmpStr(vgProductDetail.getFillerWeight())); document.addField(SEARCH_PRODUCT_KEYWORD, StringUtils.nullToEmpStr(vgProductDetail.getKeyWord())); document.addField(SEARCH_PRODUCT_TEXT, ""); documents.add(document); }catch(Exception e){ //e.printStackTrace(); } } } return documents; } }
package com.vegaga.sou.task; import java.io.IOException; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.springframework.beans.factory.annotation.Autowired; import com.vegaga.sou.index.service.VgProductSkuIndexService; public class AddIndexToSolrTask { VgProductSkuIndexService vgProductSkuIndexService; @Autowired public void setVgProductSkuIndexService(VgProductSkuIndexService vgProductSkuIndexService) { this.vgProductSkuIndexService = vgProductSkuIndexService; } public void addIndexToSolr(){ HttpSolrServer server = new HttpSolrServer("http://127.0.0.1:8081/solr"); try { server.deleteByQuery("*.*"); server.add(vgProductSkuIndexService.addVgProductSkuIndex()); server.commit(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }3.读取索引信息
package com.vegaga.sou.task; 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.common.SolrDocument; public class AddIndexToSolrTaskSearchTest { public static void main(String[] args) { HttpSolrServer server = new HttpSolrServer("http://localhost:8081/solr"); SolrQuery query = new SolrQuery(); query.setQuery("106203"); QueryResponse resp = null; try { resp = server.query(query); for(SolrDocument document : resp.getResults()){ System.out.println(document.getFieldValue("id")); System.out.println(document.getFieldValue("product_id")); System.out.println(document.getFieldValue("material_art")); } } catch (SolrServerException e) { e.printStackTrace(); } } }