天天看點

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

文章目錄

  • solr
  • lucene
    • 反向索引
    • 實際舉例
    • lucene API 介紹
      • 建立索引
        • 建立 maven 項目,添加依賴
        • 建立測試類,添加以下代碼
      • 檢視索引
        • 運作 luke
        • 檢視文檔
        • 指定分詞器,并測試分詞
        • 查詢測試
      • 從索引查詢
  • solr 安裝
    • 把 solr-8.1.1.tgz 傳到伺服器
    • 解壓 solr
    • 啟動 solr
    • 浏覽器通路 solr 控制台
  • 建立 core
    • 複制預設配置
    • 建立名為 pd 的 core
  • 中文分詞測試
    • 中文分詞工具 - ik-analyzer
    • 使用 ik-analyzer 對中文進行分詞測試
    • 設定停止詞
  • 準備 mysql 資料庫資料
  • 從 mysql 導入商品資料
    • 設定字段
    • Copy Field 副本字段
    • Data Import Handler 配置
    • 導入資料
    • 查詢測試
      • 在複制字段 `_text_` 中查找 `電腦`
      • 在标題中查找 `電腦`
      • 用雙引号查找完整詞 `"筆記本"`
      • 搜尋 `+lenovo +電腦`
      • 搜尋 `+lenovo -電腦`
      • 統計 cid
      • 價格範圍
      • 多字段統計
  • 拼多商城實作商品的全文檢索
    • 修改 hosts 檔案, 添加 www.pd.com 映射
    • eclipse 導入 pd-web 項目
    • 修改資料庫連接配接配置
    • 啟動項目, 通路 www.pd.com
    • 商品檢索調用分析
    • pom.xml 添加 solr 和 lombok 依賴
    • application.yml 添加 solr 連接配接資訊
    • Item 實體類
    • SearchService 業務接口
    • SearchServiceImpl 業務實作類
    • SearchController 控制器

solr

Solr是一個高性能,基于Lucene的全文搜尋伺服器。同時對其進行了擴充,提供了比Lucene更為豐富的查詢語言,同時實作了可配置、可擴充,并對查詢性能進行了優化,并且提供了一個完善的功能管理界面,是一款非常優秀的全文搜尋引擎。

lucene

Lucene是apache jakarta項目的一個子項目,是一個開放源代碼的全文檢索引擎開發工具包,但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。Lucene的目的是為軟體開發人員提供一個簡單易用的工具包,以友善的在目标系統中實作全文檢索的功能,或者是以此為基礎建立起完整的全文檢索引擎。

反向索引

我們一般情況下,先找到文檔,再在文檔中找出包含的詞;

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

反向索引則是這個過程反過來,用詞,來找出它出現的文檔.

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

實際舉例

文檔編号 文檔内容
1 全文檢索引擎工具包
2 全文檢索引擎的架構
3 查詢引擎和索引引擎

分詞結果

文檔編号 分詞結果集
1 {全文,檢索,引擎,工具,包}
2 {全文,檢索,引擎,的,架構}
3 {查詢,引擎,和,索引,引擎}

反向索引

編号 單詞 文檔編号清單
1 全文 1,2
2 檢索 1,2
3 引擎 1,2,3
4 工具 1
5 1
6 架構 2
7 查詢 3
8 索引 3

lucene API 介紹

建立索引

建立 maven 項目,添加依賴

<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">
	<modelVersion>4.0.0</modelVersion>
	<groupId>cn.tedu</groupId>
	<artifactId>lucene-demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>luceme-demo</name>

	<dependencies>
		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-core</artifactId>
			<version>8.1.1</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>

		<dependency>
			<groupId>org.apache.lucene</groupId>
			<artifactId>lucene-analyzers-smartcn</artifactId>
			<version>8.1.1</version>
		</dependency>

	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.8.0</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
           

建立測試類,添加以下代碼

package test;

import java.io.File;

import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.LongPoint;
import org.apache.lucene.document.StoredField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;

public class Test1 {
	String[] a = {
			"3, 華為 - 華為電腦, 爆款",
			"4, 華為手機, 旗艦",
			"5, 聯想 - Thinkpad, 商務本",
			"6, 聯想手機, 自拍神器"
	};
	
	@Test
	public void test1() throws Exception {
		//存儲索引檔案的路徑
		File path = new File("d:/abc/");
		FSDirectory d = FSDirectory.open(path.toPath());
		//lucene提供的中文分詞器
		SmartChineseAnalyzer analyzer = new SmartChineseAnalyzer();
		//通過配置對象來指定分詞器
		IndexWriterConfig cfg = new IndexWriterConfig(analyzer);
		//索引輸出工具
		IndexWriter writer = new IndexWriter(d, cfg);
		
		for (int i = 0; i < a.length; i++) {
			String[] strs = a[i].split(",");
			
			//建立文檔,文檔中包含的是要索引的字段
			Document doc = new Document();
			doc.add(new LongPoint("id", Long.parseLong(strs[0])));
			doc.add(new StoredField("id", Long.parseLong(strs[0])));
			doc.add(new TextField("title", strs[1], Store.YES));
			doc.add(new TextField("sellPoint", strs[2], Store.YES));
			
			//将文檔寫入磁盤索引檔案
			writer.addDocument(doc);
		}
		writer.close();
		
	}
	
}
           

檢視索引

運作 luke

運作lucene 8.1.1中的luke應用程式,指定索引的存放目錄

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

檢視文檔

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

指定分詞器,并測試分詞

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

查詢測試

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索
  • id的查詢
Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

從索引查詢

在測試類中添加 test2() 測試方法

package test;

import java.io.File;

import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field.Store;
import org.apache.lucene.document.LongPoint;
import org.apache.lucene.document.StoredField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.FSDirectory;
import org.junit.Test;

public class Test1 {
	String[] a = {
			"3, 華為 - 華為電腦, 爆款",
			"4, 華為手機, 旗艦",
			"5, 聯想 - Thinkpad, 商務本",
			"6, 聯想手機, 自拍神器"
	};
	
	@Test
	public void test1() throws Exception {
		//存儲索引檔案的路徑
		File path = new File("d:/abc/");
		FSDirectory d = FSDirectory.open(path.toPath());
		//lucene提供的中文分詞器
		SmartChineseAnalyzer analyzer = new SmartChineseAnalyzer();
		//通過配置對象來指定分詞器
		IndexWriterConfig cfg = new IndexWriterConfig(analyzer);
		//索引輸出工具
		IndexWriter writer = new IndexWriter(d, cfg);
		
		for (int i = 0; i < a.length; i++) {
			String[] strs = a[i].split(",");
			
			//建立文檔,文檔中包含的是要索引的字段
			Document doc = new Document();
			doc.add(new LongPoint("id", Long.parseLong(strs[0])));
			doc.add(new StoredField("id", Long.parseLong(strs[0])));
			doc.add(new TextField("title", strs[1], Store.YES));
			doc.add(new TextField("sellPoint", strs[2], Store.YES));
			
			//将文檔寫入磁盤索引檔案
			writer.addDocument(doc);
		}
		writer.close();
		
	}
	
	@Test
	public void test2() throws Exception {
		//索引資料的儲存目錄
		File path = new File("d:/abc");
		FSDirectory d = FSDirectory.open(path.toPath());
		//建立搜尋工具對象
		DirectoryReader reader = DirectoryReader.open(d);
		IndexSearcher searcher = new IndexSearcher(reader);
		
		//關鍵詞搜尋器,我們搜尋 "title:華為"
		TermQuery q = new TermQuery(new Term("title", "華為"));
		//執行查詢,并傳回前20條資料
		TopDocs docs = searcher.search(q, 20);

		//周遊查詢到的結果文檔并顯示
		for (ScoreDoc scoreDoc : docs.scoreDocs) {
			Document doc = searcher.doc(scoreDoc.doc);
			System.out.println(doc.get("id"));
			System.out.println(doc.get("title"));
			System.out.println(doc.get("sellPoint"));
			System.out.println("--------------");
		}
	}
	
}

           

solr 安裝

下面我們來安裝 solr 伺服器

把 solr-8.1.1.tgz 傳到伺服器

先切換到

/usr/local

目錄

cd /usr/local
           

把檔案傳到

/usr/local

目錄下

解壓 solr

cd /usr/local

# 上傳 solr-8.1.1.tgz 到 /usr/local 目錄
# 并解壓縮
tar -xzf solr-8.1.1.tgz
           

啟動 solr

cd /usr/local/solr-8.1.1

# 不建議使用管理者啟動 solr,加 -force 強制啟動
bin/solr start -force

# 開放 8983 端口
firewall-cmd --zone=public --add-port=8983/tcp --permanent
firewall-cmd --reload
           

浏覽器通路 solr 控制台

http://192.168.64.170:8983

  • 注意修改位址
Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

建立 core

資料庫中 pd_item 表中的商品資料, 在 solr 中儲存索引資料, 一類資料, 在 solr 中建立一個 core 儲存索引資料

建立一個名為 pd 的 core, 首先要準備以下目錄結構:

# solr目錄/server/solr/
#                    pd/
#                     conf/
#                     data/


cd /usr/local/solr-8.1.1

mkdir server/solr/pd
mkdir server/solr/pd/conf
mkdir server/solr/pd/data
           

conf 目錄是 core 的配置目錄, 存儲一組配置檔案, 我們以預設配置為基礎, 後續逐漸修改

複制預設配置

cd /usr/local/solr-8.1.1

cp -r server/solr/configsets/_default/conf server/solr/pd
           

建立名為 pd 的 core

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

中文分詞測試

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

填入以下文本, 觀察分詞結果:

Solr是一個高性能,采用Java5開發,基于Lucene的全文搜尋伺服器。同時對其進行了擴充,提供了比Lucene更為豐富的查詢語言,同時實作了可配置、可擴充并對查詢性能進行了優化,并且提供了一個完善的功能管理界面,是一款非常優秀的全文搜尋引擎。
           

中文分詞工具 - ik-analyzer

https://github.com/magese/ik-analyzer-solr

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索
  • 下載下傳 ik-analyzer 分詞 jar 檔案,傳到

    solr目錄/server/solr-webapp/webapp/WEB-INF/lib

    • 為了後續操作友善,我們把後面用到的jar檔案一同傳到伺服器,包括四個檔案:
      • ik-analyzer-8.1.0.jar
      • mysql-connector-java-5.1.46.jar
      • solr-dataimporthandler-8.1.1.jar
      • solr-dataimporthandler-extras-8.1.1.jar
  • 複制6個檔案到

    solr目錄/server/solr-webapp/webapp/WEB-INF/classes

# classes目錄如果不存在,需要建立該目錄
mkdir /usr/local/solr-8.1.1/server/solr-webapp/webapp/WEB-INF/classes
           
這6個檔案複制到 classes 目錄下
resources/
    IKAnalyzer.cfg.xml
    ext.dic
    stopword.dic
    stopwords.txt
    ik.conf
    dynamicdic.txt
           
  • 配置 managed-schema

修改

solr目錄/server/solr/pd/conf/managed-schema

,添加 ik-analyzer 分詞器

<!-- ik分詞器 -->
<fieldType name="text_ik" class="solr.TextField">
  <analyzer type="index">
      <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
      <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>
           
  • 重新開機 solr 服務
cd /usr/local/solr-8.1.1

bin/solr restart -force
           

使用 ik-analyzer 對中文進行分詞測試

填入以下文本, 選擇使用

text_ik

分詞器, 觀察分詞結果:

Solr是一個高性能,采用Java5開發,基于Lucene的全文搜尋伺服器。同時對其進行了擴充,提供了比Lucene更為豐富的查詢語言,同時實作了可配置、可擴充并對查詢性能進行了優化,并且提供了一個完善的功能管理界面,是一款非常優秀的全文搜尋引擎。
           
Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

設定停止詞

上傳停止詞配置檔案到

solr目錄/server/solr-webapp/webapp/WEB-INF/classes

stopword.dic
stopwords.txt
           
  • 重新開機服務,觀察分詞結果中,停止詞被忽略
bin/solr restart -force
           

準備 mysql 資料庫資料

  • 用 sqlyog 執行 pd.sql
  • 授予 root 使用者 跨網絡通路權限

    注意: 此處設定的是遠端登入的 root 使用者,本機登入的 root 使用者密碼不變

CREATE USER 'root'@'%' IDENTIFIED BY 'root';

GRANT ALL ON *.* TO 'root'@'%';
           

随機修改30%的商品,讓商品下架,以便後面做查詢測試

從 mysql 導入商品資料

設定字段

  • title

    text_ik

  • sellPoint

    text_ik

  • price

    plong

  • barcode

    string

  • image

    string

  • cid

    plong

  • status

    pint

  • created

    pdate

  • updated

    pdate

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

Copy Field 副本字段

查詢時需要按字段查詢,例如

title:電腦

, 可以将多個字段的值合并到一個字段進行查詢,預設查詢字段

_text_

将 title 和 sellPoint 複制到

_text_

字段

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

Data Import Handler 配置

  • 添加 jar 檔案

Data Import Handler 的 jar 檔案存放在

solr目錄/dist

目錄下

solr-dataimporthandler-8.1.1.jar
solr-dataimporthandler-extras-8.1.1.jar
           

複制這兩個檔案和 mysql 的 jar 檔案到

solr目錄/server/solr-webapp/webapp/WEB-INF/lib

  • dih-config.xml

    修改 mysql 的 ip 位址,傳到

    solr目錄/server/solr/pd/conf

  • solrconfig.xml 中添加 DIH 配置
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">  
    	<str name="config">dih-config.xml</str>  
    </lst>  
</requestHandler>
           
  • 重新開機 solr
cd /usr/local/solr-8.1.1

bin/solr restart -force
           

導入資料

重新開機 solr 後導入資料,确認導入的文檔數量為 3160

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

查詢測試

在複制字段

_text_

中查找

電腦

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

在标題中查找

電腦

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

用雙引号查找完整詞

"筆記本"

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

搜尋

+lenovo +電腦

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

搜尋

+lenovo -電腦

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

統計 cid

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索
Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索
Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索
Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

價格範圍

Raw Query Parameters

輸入框中填入以下内容:

facet.range=price&facet.range.start=0&facet.range.end=10000&facet.range.gap=2000

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索
Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

多字段統計

Raw Query Parameters

輸入框中填入以下内容:

facet.pivot=cid,status

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索
Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

拼多商城實作商品的全文檢索

修改 hosts 檔案, 添加 www.pd.com 映射

127.0.0.1      www.pd.com
           

eclipse 導入 pd-web 項目

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索
Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

修改資料庫連接配接配置

application.yml 配置檔案中,修改連接配接配置

spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/pd_store?useUnicode=true&characterEncoding=UTF-8
        username: root
        password: root
           

啟動項目, 通路 www.pd.com

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

商品檢索調用分析

Lucene Solr 811solrlucenesolr 安裝建立 core中文分詞測試準備 mysql 資料庫資料從 mysql 導入商品資料拼多商城實作商品的全文檢索

pom.xml 添加 solr 和 lombok 依賴

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-solr</artifactId>
</dependency>

<dependency>
	<groupId>org.projectlombok</groupId>
	<artifactId>lombok</artifactId>
</dependency>
           

application.yml 添加 solr 連接配接資訊

spring:
  data:
    solr:   #注意修改ip位址
      host: http://192.168.64.170:8983/solr/pd
           

Item 實體類

package com.pd.pojo;

import java.io.Serializable;

import org.apache.solr.client.solrj.beans.Field;

import lombok.Data;

@Data
public class Item implements Serializable {
		private static final long serialVersionUID = 1L;
		
		@Field("id")
		private String id;
		@Field("title")
		private String title;
		@Field("sellPoint")
		private String sellPoint;
		@Field("price")
		private Long price;
		@Field("image")
		private String image;

}
           

SearchService 業務接口

package com.pd.service;

import java.util.List;

import com.pd.pojo.Item;

public interface SearchService {
	List<Item> findItemByKey(String key) throws Exception;
}
           

SearchServiceImpl 業務實作類

package com.pd.service.impl;

import java.util.List;

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Service;

import com.pd.pojo.Item;
import com.pd.service.SearchService;

@Service
public class SearchServiceImpl implements SearchService {
	
	/*
	 * SolrClient執行個體是在 SolrAutoConfiguration 類中建立的
	 * 
	 * SolrAutoConfiguration添加了@Configuration注解,
	 * 是spring boot自動配置類,其中的solrClient()方法中建立了SolrClient執行個體
	 */
	@Autowired
	private SolrClient solrClient;

	@Override
	public List<Item> findItemByKey(String key) throws Exception {
		//封裝查詢的關鍵詞
		//也可以封裝其他的查詢參數,比如指定字段,facet設定等
		SolrQuery query = new SolrQuery(key);
		//查詢前多少條資料
		query.setStart(0);
		query.setRows(20);
		
		//執行查詢并得到查詢結果
		QueryResponse qr = solrClient.query(query);
		//把查詢結果轉成一組商品執行個體
		List<Item> beans = qr.getBeans(Item.class);
		return beans;
	}

}
           

SearchController 控制器

package com.pd.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import com.pd.pojo.Item;
import com.pd.service.SearchService;

@Controller
public class SearchController {
	@Autowired
	private SearchService searchService;
	
	@GetMapping("/search/toSearch.html")
	public String search(String key, Model model) throws Exception {
		List<Item> itemList = searchService.findItemByKey(key);
		model.addAttribute("list", itemList);
		return "/search.jsp";
	}
}
           

繼續閱讀