Forráskód Böngészése

集成ik分析器

zhh 6 éve
szülő
commit
a76e46e57b

+ 12 - 1
mall-search/src/main/java/com/macro/mall/search/domain/EsProduct.java

@@ -1,7 +1,11 @@
 package com.macro.mall.search.domain;
 
 import com.macro.mall.model.PmsProductAttributeValue;
+import org.springframework.data.annotation.Id;
 import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
+import org.springframework.data.elasticsearch.annotations.FieldIndex;
+import org.springframework.data.elasticsearch.annotations.FieldType;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -11,18 +15,25 @@ import java.util.List;
  * 搜索中的商品信息
  * Created by macro on 2018/6/19.
  */
-@Document(indexName = "pms", type = "product")
+@Document(indexName = "pms", type = "product",shards = 1,replicas = 0)
 public class EsProduct implements Serializable {
     private static final long serialVersionUID = -1L;
+    @Id
     private Long id;
+    @Field(index = FieldIndex.not_analyzed,type = FieldType.String)
     private String productSn;
     private Long brandId;
+    @Field(index = FieldIndex.not_analyzed,type = FieldType.String)
     private String brandName;
     private Long productCategoryId;
+    @Field(index = FieldIndex.not_analyzed,type = FieldType.String)
     private String productCategoryName;
     private String pic;
+    @Field(analyzer = "ik_max_word",type = FieldType.String)
     private String name;
+    @Field(analyzer = "ik_max_word",type = FieldType.String)
     private String subTitle;
+    @Field(analyzer = "ik_max_word",type = FieldType.String)
     private String keywords;
     private BigDecimal price;
     private Integer sale;

+ 3 - 3
mall-search/src/main/java/com/macro/mall/search/service/impl/EsProductServiceImpl.java

@@ -105,11 +105,11 @@ public class EsProductServiceImpl implements EsProductService {
         }
         //搜索
         FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery()
-                .add(QueryBuilders.matchPhraseQuery("name", keyword),
+                .add(QueryBuilders.matchQuery("name", keyword),
                         ScoreFunctionBuilders.weightFactorFunction(1000))
-                .add(QueryBuilders.matchPhraseQuery("subTitle", keyword),
+                .add(QueryBuilders.matchQuery("subTitle", keyword),
                         ScoreFunctionBuilders.weightFactorFunction(500))
-                .add(QueryBuilders.matchPhraseQuery("keywords", keyword),
+                .add(QueryBuilders.matchQuery("keywords", keyword),
                         ScoreFunctionBuilders.weightFactorFunction(200))
                 .scoreMode("sum").setMinScore(10f);
         if (StringUtils.isEmpty(keyword)) {

+ 1 - 1
mall-search/src/main/resources/dao/EsProductDao.xml

@@ -23,7 +23,7 @@
             p.recommand_status recommandStatus,
             p.stock stock,
             p.promotion_type promotionType,
-            P.keywords keywords
+            P.keywords keywords,
             p.sort sort,
             a.id attr_id,
             a.value attr_value,

+ 11 - 0
mall-search/src/test/java/com/macro/mall/search/MallSearchApplicationTests.java

@@ -2,19 +2,24 @@ package com.macro.mall.search;
 
 import com.macro.mall.search.dao.EsProductDao;
 import com.macro.mall.search.domain.EsProduct;
+import com.macro.mall.search.repository.EsProductRepository;
 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 java.util.List;
+import java.util.Map;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest
 public class MallSearchApplicationTests {
     @Autowired
     private EsProductDao productDao;
+    @Autowired
+    private ElasticsearchTemplate elasticsearchTemplate;
     @Test
     public void contextLoads() {
     }
@@ -23,5 +28,11 @@ public class MallSearchApplicationTests {
         List<EsProduct> esProductList = productDao.getAllEsProductList(null);
         System.out.print(esProductList);
     }
+    @Test
+    public void testEsMapping(){
+        elasticsearchTemplate.putMapping(EsProduct.class);
+        Map mapping = elasticsearchTemplate.getMapping(EsProduct.class);
+        System.out.println(mapping);
+    }
 
 }