goods.setCid2(spu.getCid2());
goods.setCid3(spu.getCid3());
goods.setCreateTime(spu.getCreateTime());
goods.setId(spu.getId());
goods.setAll(all);//搜索字段,包含标题,分类,品牌,规格等信息
goods.setPrice(priceList);// 所有sku价格的集合
goods.setSkus(JsonUtils.toString(skus));// 所有sku的集合的JSON格式
goods.setSpecs(specs);// 所有可以搜索的规格参数
goods.setSubTitle(spu.getSubTitle());
return goods;
}
private String chooseSegment(String value, SpecParam p) {
double val = NumberUtils.toDouble(value);
String result = “其它”;
// 保存数值段
for (String segment : p.getSegments().split(“,”)) {
String[] segs = segment.split(“-”);
// 获取数值范围
double begin = NumberUtils.toDouble(segs[0]);
double end = Double.MAX_VALUE;
if(segs.length == 2){
end = NumberUtils.toDouble(segs[1]);
}
// 判断是否在范围内
if(val >= begin && val < end){
if(segs.length == 1){
result = segs[0] + p.getUnit() + “以上”;
}else if(begin == 0){
result = segs[1] + p.getUnit() + “以下”;
}else{
result = segment + p.getUnit();
}
break;
}
}
return result;
}
}
2、然后编写一个测试类,循环查询Spu,然后调用IndexService中的方法,把SPU变为Goods,然后写入索引库:
package com.leyou.search.repostory;
import com.leyou.common.vo.PageResult;
import com.leyou.item.pojo.Spu;
import com.leyou.search.client.GoodsClient;
import com.leyou.search.pojo.Goods;
import com.leyou.search.repository.GoodsRepository;
import com.leyou.search.service.SearchService;
import org.apache.lucene.util.CollectionUtil;
import org.aspectj.weaver.ast.Var;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.stream.Collectors;
@RunWith(SpringRunner.class)
@SpringBootTest
public class GoodsRepositoryTest {
@Autowired
private GoodsRepository goodsRepository;
@Autowired
private ElasticsearchTemplate template;
@Autowired
private GoodsClient goodsClient;
@Autowired
private SearchService searchService;
@Test
public void testCreateIndex(){
template.createIndex(Goods.class);
template.putMapping(Goods.class);
}
@Test
public void loadData(){
int page = 1;
int rows = 100;
int size = 0;
do {
//查询spu的信息
PageResult result = goodsClient.querySpuByPage(page, rows, true, null);
List spuList = result.getItems();//得到当前页
if(CollectionUtils.isEmpty(spuList)){
break;
}
//构建成Goods
List goodsList = spuList.stream().map(searchService::buildGoods).collect(Collectors.toList());
//存入索引库
goodsRepository.saveAll(goodsList);
//翻页
page++;
size = spuList.size();
}while (size == 100);
}
}
运行测试类
查询虚拟机发送请求:
http://134.135.131.36:9200/goods/_search
返回结果
{
“took”: 97,
“timed_out”: false,
“_shards”: {
“total”: 1,
“successful”: 1,
“skipped”: 0,
“failed”: 0
},
“hits”: {
“total”: 181,
“max_s