之前简单的介绍了一下solr的功能已经部署成功以后的用法,现在就讲解一下具体怎么样去通过配置和编写代码实现吧数据存储到索引库
这里以商品为例,一把我们在实际项目中特别是商城经常需要对商品进行全文检索
配置:需要存储的数据结构(字段)
<schema name="example" version="1.5">
<field name="_version_" type="long" indexed="true" stored="true"/>
<field name="_root_" type="string" indexed="true" stored="false"/>
<field name="id" type="long" indexed="true" stored="true" required="true" multiValued="false" />
<field name="title" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />
<field name="sellPoint" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />
<field name="price" type="long" indexed="true" stored="true" required="true" multiValued="false" />
<field name="image" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="cid" type="long" indexed="true" stored="true" required="true" multiValued="false" />
<field name="status" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<uniqueKey>id</uniqueKey>
<!--
<fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/>
-->
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
<!--
<fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
<fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
-->
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
这里做一下简单的介绍:
field标签就是属性(字段),一个field标签就是一个属性,标签里面也有属性name字段名、 type字段类型、indexed是否支持索引(通过该字段查询),stored是否存储(有些字段不需要存储)、 required存储是是否能为空null(类似数据库的非空约束)、multiValued是否有多个值。
field的定义是比较重要,有几个技巧需注意一下,对可能存在多值得字段尽量设置 multiValued属性为true,避免建索引是抛出错误;如果不需要存储相应字段值,尽量将stored属性设为false。
fieldType便签就是数据类型,索引库的数据类型,就像我们java 数据库都有自己的数据类型,那么这里索引库也是有自己的数据类型的,java中的基本的一些数据类型在索引库都能找到对应的。这里就不一一做介绍了
索引库的配置这方面做好以后就需要去编写java对象了
package com.tiantian.search.bean;
import org.apache.solr.client.solrj.beans.Field;
public class Item {
//商品id
private Long id;
//商品标题
private String title;
//商品卖点
private String sellPoint;
//商品价格
private Long price;
//商品库存
private Integer num;
//商品条形码
private String barcode;
//商品图片(路径)
private String image;
//商品所属类目
private Long cid;
//状态 1-正常,2-下架,3-删除'
private Integer status;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSellPoint() {
return sellPoint;
}
public void setSellPoint(String sellPoint) {
this.sellPoint = sellPoint;
}
public Long getPrice() {
return price;
}
public void setPrice(Long price) {
this.price = price;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
public String getBarcode() {
return barcode;
}
public void setBarcode(String barcode) {
this.barcode = barcode;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public Long getCid() {
return cid;
}
public void setCid(Long cid) {
this.cid = cid;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
}
就是这样的一个javaBean 和配置一一对应以后就可以对索引库进行存储和删除
org.apache.solr.client.solrj.impl.HttpSolrServer //操作索引库的对象
httpSolrServer.addBean(item);//新增和修改
httpSolrServer.deleteById(itemId);//删除
httpSolrServer.commit();//提交跟新