上午
所以工作和简单模式是最常用的
solr专门做全文检索 查询 返回查询结果
不经过数据库 但是数据和数据库一致
solr
Solr是一个高性能,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。
lucene(底层)
Lucene是apache jakarta项目的一个子项目,是一个开放源代码的全文检索引擎开发工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。
lucene API 介绍 底层开发工具包
搜索出的类似作用 目前只有数字
只有文档编号不行
需求 需要摘要信息
自我小实现
这里就完成了
查看索引 运行 luke
运行lucene 8.1.1中的luke应用程序,指定索引的存放目录
查询索引
package test;
import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.*;
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;
import java.io.File;
import java.io.IOException;
public class Test1 {
String[] a = {
"3, 华为 - 华为电脑, 爆款",
"4, 华为手机, 旗舰",
"5, 联想 - Thinkpad, 商务本",
"6, 联想手机, 自拍神器"
};
@Test
public void test() throws Exception {
// 准备文件夹 d:/abc
FSDirectory d = FSDirectory.open(new File("d:/abc").toPath());
// 中文分词配置
IndexWriterConfig conf = new IndexWriterConfig(new SmartChineseAnalyzer());
// 索引的输出工具
IndexWriter writer = new IndexWriter(d, conf);
// 循环遍历四篇文档,输出索引
for (String s : a) {
// "3, 华为 - 华为电脑, 爆款" --> ["3", "名称", "卖点"]
// 0 1 2
String[] arr = s.split("\\s*,\\s*");
// 数据封装到 Document 对象
Document doc = new Document();
doc.add(new LongPoint("id", Long.parseLong(arr[0])));
doc.add(new StoredField("id", Long.parseLong(arr[0])));
doc.add(new TextField("title", arr[1], Field.Store.YES));
doc.add(new TextField("sellPoint", arr[2], Field.Store.YES));
writer.addDocument(doc);
}
writer.flush();
writer.close();
}
@Test
public void test2() throws Exception {
// 文件夹
FSDirectory d = FSDirectory.open(new File("d:/abc").toPath());
// 读取索引的工具
DirectoryReader reader = DirectoryReader.open(d);
// 查询工具
IndexSearcher searcher = new IndexSearcher(reader);
// 封装查询关键词
TermQuery query = new TermQuery(new Term("title", "华为"));
// 用查询工具查询,得到查询结果:
// 文档排行[{id:2, score:0.33},{id:1, score:0.31},{id:5, score:0.26}]
TopDocs td = searcher.search(query, 20);
for (ScoreDoc sd :td.scoreDocs) {
int id = sd.doc;
float score = sd.score;
Document doc = searcher.doc(id);
System.out.println(id);
System.out.println(score);
System.out.println(doc.get("title"));
System.out.println(doc.get("sellPoint"));
System.out.println("------------------------------------");
}
}
}
自我实现
成功
solr 开箱即用
浏览器访问 solr 控制台
http://192.168.64.170:8983
打开成功
核心指的就是一份索引数据
配置
自我实现
核心是对相同数据的文档生成的索引数据(也可以对应到数据库的一张表)
下午
用中文分词器 ik
重启成功
停止词配置
尝试
尝试停止是一个 待会去
从 mysql 导入商品数据
设置字段
title text_ik
sellPoint text_ik
price plong
barcode string
image string
cid plong
status pint
created pdate
updated pdate
root身份去登陆
自我实现
如上 跨网络连接 必须先授权
准备 mysql 数据库数据
用 sqlyog 执行 pd.sql
授予 root 用户 跨网络访问权限
注意: 此处设置的是远程登录的 root 用户,本机登录的 root 用户密码不变
配置数据导入工具
为什么本机是64.1
实现pd上传搜索功能
接口及其接口实现类
controller控制层
页面实现