接着我们进行mapping设置
在代码之前我讲下在项目中用到的类型及为什么这样用
long,keyword ,text ,double ,date
使用数字类型long用来存储商品id,keyword 用来存储字符类型,主要用于精确值查询,不用分词效果的字段
text 字符类型 该字段需要分词,double类型主要用于价格的存储,date 类型用于时间的存储。
elasticsearch java 代码如下:
private String getMapping(String indexName) {
try {
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject()
.startObject("properties")
// 数字类型 商品ID
.startObject("productId")
.field("type", "long")
.field("index", false)
.endObject()
// 精确查询
.startObject("productSn")
.field("type", "keyword")
.endObject()
// 分词 商品名称
.startObject("productName")
.field("type", "text")
.field("analyzer", "ik_max_word")
.field("search_analyzer", "ik_max_word")
.endObject()
// 价格 double类型
.startObject("showPrice")
.field("type", "double")
.endObject()
// 活动价
.startObject("activityPrice")
.field("type", "double")
.field("index", false)
.endObject()
// 含税成本价
.startObject("taxIncludedPrice")
.field("type", "double")
.field("index", false)
.field("store", false)
.endObject()
// 不含税成本价
.startObject("taxFreePrice")
.field("type", "double")
.field("index", false)
.field("store", false)
.endObject()
// 商品创建时间createTime
.startObject("createTime")
.field("type", "date")
.field("format", "yyyy-MM-dd HH:mm:ss")
.field("store", false)
.endObject()
// brandEnName
.startObject("brandEnName")
.field("type", "keyword")
.field("store", false)
.endObject()
// brandChName
.startObject("brandChName")
.field("type", "text")
.field("analyzer", "ik_max_word")
.field("search_analyzer", "ik_max_word")
.endObject()
// 编码 精确匹配
.startObject("brandCode")
.field("type", "keyword")
.endObject()
.startObject("brandCodeAndName")
.field("type", "keyword")
.endObject()
// 尺码 itemSize
.startObject("itemSize")
.field("type", "keyword")
.field("index", false)
.endObject()
// 库存 stock
.startObject("stock")
.field("type", "long")
.field("index", false)
.endObject()
// 佣金率 commissionRate
.startObject("commissionRate")
.field("type", "double")
.field("index", false)
.endObject()
// vendorCode
.startObject("vendorCode")
.field("type", "keyword")
.endObject()
// vendorName
.startObject("vendorName")
.field("type", "keyword")
.endObject()
.startObject("vendorCodeName")
.field("type", "keyword")
.endObject()
// vendorGroup
.startObject("vendorGroup")
.field("type", "keyword")
.endObject()
// spaceFlag
.startObject("spaceFlag")
.field("type", "keyword")
.endObject()
// onsaleState
.startObject("onsaleState")
.field("type", "long")
.endObject()
// onsaleTime
.startObject("onsaleTime")
.field("type", "date")
.field("format", "yyyy-MM-dd HH:mm:ss")
.endObject()
// 关键字
.startObject("productKeywords")
.field("type", "text")
.field("analyzer", "ik_max_word")
.field("search_analyzer", "ik_max_word")
.endObject()
// oneClassCode
.startObject("oneClassCode")
.field("type", "keyword")
.endObject()
// oneClassName
.startObject("oneClassName")
.field("type", "keyword")
.endObject()
.startObject("classOneCodeName")
.field("type", "keyword")
.endObject()
// twoClassCode
.startObject("twoClassCode")
.field("type", "keyword")
.endObject()
// twoClassName
.startObject("twoClassName")
.field("type", "keyword")
.endObject()
.startObject("classTwoCodeName")
.field("type", "keyword")
.endObject()
// threeClassCode
.startObject("threeClassCode")
.field("type", "keyword")
.endObject()
// threeClassName
.startObject("threeClassName")
.field("type", "keyword")
.endObject()
.startObject("classThreeCodeName")
.field("type", "keyword")
.endObject()
// fourClassCode
.startObject("fourClassCode")
.field("type", "keyword")
.endObject()
// fourClassName
.startObject("fourClassName")
.field("type", "keyword")
.endObject()
.startObject("classFourCodeName")
.field("type", "keyword")
.endObject()
// imgUrl
.startObject("imgUrl")
.field("type", "keyword")
.endObject()
// sevendaysSaleAmount
.startObject("sevendaysSaleAmount")
.field("type", "double")
.endObject()
// sevendaysSaleNumber
.startObject("sevendaysSaleNumber")
.field("type", "long")
.endObject()
// fifteendaysSaleAmount
.startObject("fifteendaysSaleAmount")
.field("type", "double")
.endObject()
// fifteendaysSaleNumber
.startObject("fifteendaysSaleNumber")
.field("type", "long")
.endObject()
// thirtydaysSaleAmount
.startObject("thirtydaysSaleAmount")
.field("type", "double")
.endObject()
// thirtydaysSaleNumber
.startObject("thirtydaysSaleNumber")
.field("type", "long")
.endObject()
// sixtydaysSaleAmount
.startObject("sixtydaysSaleAmount")
.field("type", "double")
.endObject()
// sixtydaysSaleNumber
.startObject("sixtydaysSaleNumber")
.field("type", "long")
.endObject()
// ninetydaysSaleAmount
.startObject("ninetydaysSaleAmount")
.field("type", "double")
.endObject()
// ninetydaysSaleNumber
.startObject("ninetydaysSaleNumber")
.field("type", "long")
.endObject()
// loadDate
.startObject("loadDate")
.field("type", "date")
.field("format", "yyyy-MM-dd HH:mm:ss")
.endObject()
.endObject()
.endObject();
LOGGER.warn("创建索引【{}】的mapping success:【{}】", indexName,
builder.string());
return builder.string();
} catch (IOException e) {
LOGGER.warn("创建索引【{}】的mapping fail:【{}】", indexName, e);
e.printStackTrace();
}
return null;
}
该方法得到是json格式的字符串,其中代码一看就明白,后面还会添加拼音搜索 mapping怎么设置
第二部分到此就结束了,如上有错误之处,不足之处望之处,多谢。