1. 程式人生 > >品優購專案記錄:day09

品優購專案記錄:day09

今日目標:

(1)完成solr環境安裝、中文解析器和業務域的配置

(2)會使用Spring Data Solr完成增刪改查操作

(3)完成批量資料匯入

(4)完成按關鍵字搜尋功能

(5)完成高亮顯示關鍵字的功能

(6)完成更新索引庫的功能

目錄

4.7 效果

1、Solr環境搭建和配置

準備工作:安裝Solr的環境以及solrhome的基礎配置

1.1 在solrhome中的collction1下的conf目錄中開啟 schema.xml 配置業務域

<field name="item_goodsid" type="long" indexed="true" stored="true"/>

<field name="item_title" type="text_ik" indexed="true" stored="true"/>

<field name="item_price" type="double" indexed="true" stored="true"/>

<field name="item_image" type="string" indexed="false" stored="true" />

<field name="item_category" type="string" indexed="true" stored="true" />

<field name="item_seller" type="text_ik" indexed="true" stored="true" />

<field name="item_brand" type="string" indexed="true" stored="true" />

1.2 在solrhome中的collction1下的conf目錄中開啟 schema.xml 配置複製域

<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>

<copyField source="item_title" dest="item_keywords"/>

<copyField source="item_category" dest="item_keywords"/>

<copyField source="item_seller" dest="item_keywords"/>

<copyField source="item_brand" dest="item_keywords"/>

1.3 在solrhome中的collction1下的conf目錄中開啟 schema.xml 配置動態域

<dynamicField name="item_spec_*" type="string" indexed="true" stored="true" />

2、批量匯入資料到索引庫

說明:批量匯入資料到索引庫這一操作,一般只執行一次,所以我們不需要將其放入後臺系統中,我們單獨建立一個模組打成jar包,讓使用者可以通過命令列執行這一操作即可

準備工作:搭建單獨的模組,名稱:pinyougou-solr-util

2.1 匯入商品資料到索引庫

(1)匯入依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>pinyougou-parent</artifactId>
        <groupId>com.pinyougou</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>pinyougou-solr-util</artifactId>
    <dependencies>
        <dependency>
            <groupId>com.pinyougou</groupId>
            <artifactId>pinyougou-dao</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </dependency>
        <!--solr相關依賴 -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-solr</artifactId>
            <version>1.5.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.2.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
        </dependency>
    </dependencies>

</project>

(2)編寫配置檔案(applicationContext-service.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


	<context:component-scan base-package="com.pinyougou.solrutil"/>
   
</beans>

(3)編寫SolrUtil類,先進行資料查詢測試,然後再使用solr進行正式匯入

package com.pinyougou.solrutil;

import com.pinyougou.mapper.TbItemMapper;
import com.pinyougou.pojo.TbItem;
import com.pinyougou.pojo.TbItemExample;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * Solr
 * Author xushuai
 * Description
 */
@Component
public class SolrUtil {

    @Autowired
    private TbItemMapper itemMapper;


    public static void main(String[] args){
        ApplicationContext ac =
                new ClassPathXmlApplicationContext("classpath*:spring/applicationContext*.xml");
        SolrUtil solrUtil = ac.getBean(SolrUtil.class);
        // 執行匯入
        solrUtil.importData();
    }

    /**
     * 匯入商品資料到索引庫
     */
    private void importData() {
        // 構造查詢條件
        TbItemExample example = new TbItemExample();
        example.createCriteria().andStatusEqualTo(TbItem.STATUS_NORMAL);
        // 執行查詢
        List<TbItem> tbItems = itemMapper.selectByExample(example);

        for (TbItem item : tbItems) {
            System.out.println(item.getTitle());
        }

    }

}

(4)輸出

(5)修改pojo中的實體類TbItem,將對應業務域加到對應的屬性上,只注意加了@Field註解的欄位

    @Field
    private Long id;

    @Field("item_title")
    private String title;

    private String sellPoint;

    @Field("item_price")
    private BigDecimal price;

    private Integer stockCount;

    private Integer num;

    private String barcode;

    @Field("item_image")
    private String image;

    private Long categoryid;

    private String status;

    private Date createTime;

    private Date updateTime;

    private String itemSn;

    private BigDecimal costPirce;

    private BigDecimal marketPrice;

    private String isDefault;

    @Field("item_goodsId")
    private Long goodsId;

    private String sellerId;

    private String cartThumbnail;

    @Field("item_category")
    private String category;

    @Field("item_brand")
    private String brand;

    private String spec;

    @Field("item_seller")
    private String seller;

注意:使用Field註解之前,需要在pojo的pom.xml中引入solr的依賴

(6)配置 Solr 配置檔案(applicationContext-solr.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:solr="http://www.springframework.org/schema/data/solr"
	xsi:schemaLocation="http://www.springframework.org/schema/data/solr 
  		http://www.springframework.org/schema/data/solr/spring-solr-1.0.xsd
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context.xsd">
	
	<!-- solr伺服器地址 -->
	<solr:solr-server id="solrServer" url="http://127.0.0.1:8080/solr" />

   
	<!-- solr模板,使用solr模板可對索引庫進行CRUD的操作 -->
	<bean id="solrTemplate" class="org.springframework.data.solr.core.SolrTemplate">
		<constructor-arg ref="solrServer" />
	</bean>
</beans>

(7)修改SolrUtil,注入SolrTemplate,然後修改importData方法,實現資料匯入Solr索引庫

(8)檢視索引庫

2.2 匯入規格資料到索引庫

(1)修改pojo工程中的item實體,新增一個屬性用於儲存動態域資訊,使用 @Dynamic表示為動態域

    @Dynamic
    @Field("item_spec_*")
    private Map<String, String> specMap;

注意:必須加入泛型限定<String, String>,否則儲存時,會報錯,他在將資料替換到萬用字元上會出錯

(2)修改SolrUtil中的importData方法,使用spec轉換為Map集合,儲存到索引庫

3、搜尋服務工程搭建

3.1 搭建工程

匯入相關依賴,編寫相關配置檔案,參考content-interface和content-service,只需要注意匯入solr的配合檔案即可

3.2 服務層介面

(search-interface),新建ItemSearchService,並新增搜尋方法

package com.pinyougou.search.service;

import java.util.Map;

/**
 * 搜尋服務層介面
 * Author xushuai
 * Description
 */
public interface ItemSearchService {

    /**
     * 搜尋
     *
     * @param searchMap 搜尋條件
     * @return java.util.Map
     */
    Map search(Map searchMap);

}

3.3 服務層實現(search-service)

新建ItemSearchServiceImpl,實現ItemSearchService

package com.pinyougou.search.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.pinyougou.pojo.TbItem;
import com.pinyougou.search.service.ItemSearchService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.solr.core.SolrTemplate;
import org.springframework.data.solr.core.query.Criteria;
import org.springframework.data.solr.core.query.Query;
import org.springframework.data.solr.core.query.SimpleQuery;
import org.springframework.data.solr.core.query.result.ScoredPage;

import java.util.HashMap;
import java.util.Map;

/**
 * 搜尋服務實現
 * Author xushuai
 * Description
 */
@Service
public class ItemSearchServiceImpl implements ItemSearchService {

    @Autowired
    private SolrTemplate solrTemplate;

    @Override
    public Map search(Map searchMap) {
        // 構造查詢條件
        Query query = new SimpleQuery("*:*");
        Criteria criteria = new Criteria("item_keywords");
        criteria.is(searchMap.get("keywords"));
        query.addCriteria(criteria);

        // 執行查詢
        ScoredPage<TbItem> pageInfo = solrTemplate.queryForPage(query, TbItem.class);

        // 返回結果
        Map resultMap = new HashMap();
        resultMap.put("rows", pageInfo.getContent());

        return resultMap;
    }
}

4、搜尋控制層服務

4.1 搭建控制層工程

名稱為:pinyougou-search-web,引入相關依賴和相關配置檔案,還需要匯入相關靜態資源

4.2 在search-web中,新建ItemSearchController

package com.pinyougou.search.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.pinyougou.search.service.ItemSearchService;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * 搜尋控制層
 * Author xushuai
 * Description
 */
@RestController
@RequestMapping("/itemsearch")
public class ItemSearchController {

    @Reference
    private ItemSearchService itemSearchService;

    @RequestMapping("/search")
    public Map search(@RequestBody Map searchMap) {
       return itemSearchService.search(searchMap);
    }
}

4.3 編寫searchService.js和searchController.js

(1)searchService.js

app.service('searchService',function ($http) {
    
    // 搜尋
    this.search = function (searchMap) {
        return $http.post("itemsearch/search.do", searchMap);
    }
    
});

(2)searchController.js

app.controller('searchController',function ($scope,searchService) {
   
    $scope.search = function () {
        searchService.search($scope.searchMap).success(
            function (rtn) {
                $scope.resultMap = rtn;
            }
        );
    }
});

4.4 在頁面中引入相關js和基本的angular js指令

4.5 給所有框和搜尋按鈕繫結變數和單擊事件

4.6 迴圈遍歷查詢結果,展示搜尋結果

4.7 效果

相關推薦

專案記錄day09

今日目標: (1)完成solr環境安裝、中文解析器和業務域的配置 (2)會使用Spring Data Solr完成增刪改查操作 (3)完成批量資料匯入 (4)完成按關鍵字搜尋功能 (5)完成高亮顯示關鍵字的功能 (6)完成更新索引庫的功能 目錄

專案記錄day18

2018年08月01日 23:03:25 GodBbb 閱讀數:349更多 個人分類: 個人成長 實戰專案 品優購 微信支付 今日目標: (1)掌握二維碼生成外掛 qrious 的使用 (2)理解微信支付開發的整體思路 (3)呼叫微信支付介面(統一下單)生成支付二維碼 (4)

專案記錄day19

2018年08月19日 12:00:36 GodBbb 閱讀數:176更多 個人分類: 個人成長 實戰專案 品優購 今日目標: (1)理解秒殺實現思路 (2)實現秒殺頻道首頁功能 (3)實現秒殺商品詳細頁功能 (4)實現秒殺下單功能 (5)實現秒殺支付功能 目錄

專案記錄day17

今日目標: (1)掌握跨域請求CORS解決方案 (2)完成結算頁收貨人地址選擇功能 (3)完成結算頁支付方式選擇 (4)完成結算頁商品清單功能 (5)完成儲存訂單功能 目錄 3.2 前端

專案記錄day06

今日目標:         (1)完成選擇商品分類         (2)完成品牌選擇功能         (3)完成擴充套件屬性錄入         (4)完成規格選擇功能         (5)完成SKU商品資訊功能         (6)完成是否啟用規格

專案記錄day13

今日目標: (1)理解訊息中介軟體、JMS等概念 (2)掌握JMS點對點與釋出訂閱模式的收發訊息 (3)掌握Spring JMS (4)完成商品稽核,匯入索引 (5)完成商品刪除,移除索引 (6)完成商品稽核生成商品詳細頁 (7)完成商品刪除,刪除詳細頁

專案記錄day04

今日目標:         (1)實現 Spring Security 入門 Demo         (2)完成運營商登入與安全控制功能         (3)完成商家入駐         (4)完成商家稽核         (5)完成商家系統登入與安全控制

專案記錄day12

今日目標: (1)掌握 Freemarker常用的指令與內建函式 (2)完成商品詳細頁的資料顯示 (3)完成商品詳細頁的動態顯示 (4)完成商品詳細頁讀取SKU資訊的業務邏輯 (5)完成商品稽核呼叫功能 目錄 1.1 配置

專案記錄day11

今日目標: (1)實現品優購價格區間篩選功能 (2)實現搜尋結果分頁功能 (3)理解多關鍵字搜尋 (4)實現搜尋結果排序功能 (5)實現隱藏品牌列表功能 (6)實現搜尋頁與首頁對接功能 (7)完成更新索引庫的功能 目錄 1.2 前端 1.3

專案記錄day01

今日目標:         (1)瞭解電商行業特點以及理解電商的模式         (2)瞭解整體品優購的架構特點         (3)能夠運用Dubbox + SSM 搭建分散式應用         (4)搭建工程框架,完成品牌列表的後端程式碼 目

專案記錄day15

今日目標: (1)搭建單點登入服務端,開發單點登入客戶端 (2)實現CAS認證資料來源設定 (3)更換CAS登入頁面 (4)掌握CAS與Spring Security整合 (5)完成使用者中心單點登入功能 目錄 1、品優購使用者中

001 -- 專案簡單介紹

品優購網上商城是一個綜合性的 B2B2C 平臺,類似京東商城、天貓商城。網站採用商家入駐的模式,商家入駐平臺提交申請,有平臺進行資質稽核,稽核通過後,商家擁有獨立的管理後臺錄入商品資訊。商品經過平臺稽核後即可釋出。 品優購網上商城主要分為網站前臺、運營商後臺、商家管理後臺三個子系統 1.1 網站前臺 主

專案筆記day01——(SOA架構,Dubbox及小demo,Zookeeper,專案打包,管理中心linux環境部署與專案架構搭建)

此部落格是為了記錄業餘時間每一天課程的所學 1.什麼是SOA架構 SOA是Service-Oriented Architecture的首字母簡稱,它是一種支援面向服務的架構樣式。從服務、基於服務開發和服務的結果來看,面向服務是一種思考方式。其實SOA架構更多應用於網際網路專案開發。

專案--購物車結算頁面

效果圖 HTML部分 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>品優購購物車結算</titl

專案異常No qualifying bean of type [org.springframework.data.redis.core.RedisTemplate] found for depe

報錯 嚴重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.sprin

使用idea實現專案搭建

使用idea搭建maven專案工程詳細步驟: 建立pinyougou-parent父工程 點選File ->New->Module…,建立maven專案   點選Next 點選Next 點選Next ♦點選Finish,完成 新增pom

day01_電商專案_01_走進電商 + 分散式框架-Dubbox + -框架搭建 + 逆向工程 + 品牌列表展示 + 常見錯誤_用心筆記

課程目標 目標1:瞭解電商行業特點以及理解電商的模式 目標2:瞭解整體品優購的架構特點 目標3:能夠運用Dubbox+SSM搭建分散式應用 目標4:搭建工程框架,完成品牌列表後端程式碼 1. 走進電商 1.1 電商行業分析   近年來,中國的電子商

Java之部署_day01(3)

客戶端訪問 zoo.cfg process src 創建 png 51cto 一個 準備 2.2 搭建 Zookeeper 集群 2.2.1 搭建要求 真實的集群是需要部署在不同的服務器上的,但是在我們測試時同時啟動十幾個虛擬機內存會吃不消,所以我們通常會搭建偽集群,也就是

Java之部署_day01(4)

領導者 bad address lower ava 正常 發生 str caf 2.1.1 啟動集群啟動集群就是分別啟動每個實例。啟動後我們查詢一下每個實例的運行狀態先查詢第一個服務 Mode 為 follower 表示是跟隨者(從)再查詢第二個服務 Mod 為 leade