主要内容
在海量数据下,对 MySQL 或 Oracle 进行模糊查询或条件查询的效率是很低的。而搜索功能在绝大多数项目中都是必须的,如何提升搜索效率是很多互联网项目必须要考虑的问题。
既然使用关系型数据库进行搜索效率比较低,最直接的解决方案就是使用专用搜索工具进行搜索,从而提升搜索效率。
基于 Apache Lucene(全文检索工具库)实现搜索。但是 Lucene 的使用对于绝大多
数的程序员都是“噩梦级”的。
基于谷歌 API 实现搜索。
基于百度 API 实现搜索。
Solr没有表的概念,它就是一个索引,这个索引就当做是表,希望有多少个字段就在配置文件中写。
Solr 是基于 Apache Lucene 构建的用于搜索和分析的开源解决方案。可提供可扩展索引、搜索功能、高亮显示和文字解析功能。
Solr 本质就是一个 Java web 项目,且内嵌了 Jetty 服务器,所以安装起来非常方便。
客户端操作 Solr 的过程和平时我们所写项目一样,就是请求 Solr 中控制器,处理完数据后把结果响应给客户端。
只要讨论搜索就不得不提的两个概念:正向索引(forward index)和反向索引(inverted index)。
正向索引:从文档内容到词组的过程。每次搜索的时候需要搜索所有文档,每个文档比较搜索条件和词组。
反向索引:是正向索引的逆向。建立词组和文档的映射关系。通过找到词组就能找到文档内容。(和新华字典找字很像)
Solr 能够提升检索效率的主要原因就是分词和索引(反向索引)。
分词:会对搜索条件/存储内容进行分词,分成日常所使用的词语。
索引:存储在 Solr 中内容会按照程序员的要求来是否建立索引。如果要求建立索引会把存储内容中关键字(分词)建立索引。
Solr 为了给内容建立索引,所以 Solr 就必须具备数据存储能力。所有需要被搜索的内容都需要存储在 Solr 中,在开发中需要把数据库中数据添加到 Solr 中进行初始化,每次修改数据库中数据还需要同步 Solr 中的数据。
Solr 中数据存储是存储在 Document 对象中,对象中可以包含的属性和属性类型都定义在 schema.xml 中。如果需要自定义属性或自定义属性类型都需要修改 schema.xml 配置文件。从 Solr5 开始 schema.xml 更改名称为 managed-schema(没有扩展名) 配置文件只加不减
Solr 是使用 Java 编写,所以必选先安装 JDK。
上传压缩包 solr-8.2.0.tgz 到upload 中。
解压
tar zxf solr-8.2.0.tgz
cp -r solr-8.2.0 …/solr
Linux系统中软件不要装到root目录下,权限要求很高
红色为Linux下启动文件,黄色为Windows下启动文件,蓝色为核心文件
修改启动参数,否则启动时报警告。提示设置 SOLR_ULIMIT_CHECKS=false取消系统安全检查
cd /usr/local/solr/bin
vim solr.in.sh
Solr 内嵌 Jetty,直接启动即可。默认监听 8983 端口。但是9083端口也被占用了
Solr 默认不推荐 root 账户启动,如果是 root 账户启动需要添加-force 参数。
./solr start -force
关闭命令
solr的运行状态命令
solr_home是solr运行的主目录
在关闭防火墙的前提下,可以在 windows 的浏览器中访问 Solr。
输入: http://192.168.32.133:8983 就可以访问 Solr 的可视化管理界面。
左侧有 5 个菜单。分别是:
(1)Dashboard:面板显示 Solr 的总体信息。
(2)Logging:日志
(3)Core Admin:Solr 的核心。类似于数据的 Database
(4)Java Perperties:所有 Java 相关属性。
(5)Thread Dump:线程相关信息。
(6)如果有 Core,将显示在此处。
Solr 安装完成后默认是没有核心的。需要手动配置。
需要在 solr/server/solr 下新建文件夹,并给定配置文件,否则无法建立。
在/usr/local/solr/server/solr 中新建自定义名称目录。此处示例名称为 testcore。
cd /usr/local/solr/server/solr
mkdir bjsxt 创建核心
在 configsets 里面包含了_default 和 sample_techproducts_configs。里面都是配置文件示例。_default 属于默认配置,较纯净。sample_techproducts_configs 是带有了一些配置示例。
cp -r configsets/_default/conf/ bjsxt/
在可视化管理界面中 Core Admin 中编写信息后点击 Add Core 后,短暂延迟后testcore 就会创建成功。schema 处不用更改。
name是核心名字,instanceDir是实例目录就是solr_home下创建的目录,一般情况下两者同名
dataDir名字可以自定义是存数据的目录
solrconfig.xml和schema.xml需要我们提供
schema.xml在文件表现上就是managed-schema
创建成功,核心选择器
索引库和反向索引都在index目录里
在客户端管理界面中,选择新建的 Core 后,就可以按照自己项目的需求进行操作了。
在 Solr 可视化管理界面中,Core 的管理菜单项中都会有 Analysis。表示根据Scheme.xml(managed-schema)中配置要求进行解析。
对英文解析就比较简单了,只要按照空格把英文语句拆分成英文单词即可。
但是如果条件是中文时,把一句话按照字进行拆分就不是很合理了。正确的方式是按照合理的词组进行拆分。
上传 ik-analyzer.jar 到 webapps 中。
去 https://search.maven.org/search?q=com.github.magese 下 载 对 应 版 本 的ik-analyzer。可以在"软件/Analyzer"中直接获取。 ik-analyzer.jar 的本部需要和solr的版本一一对应
上传 ik-analyzer-8.2.0.jar 到
/usr/local/solr/server/solr-webapp/webapp/WEB-INF/lib 目录中
修改/usr/local/solr/server/solr/testcore/conf/managed-schema
vim /usr/local/solr/server/solr/testcore/conf/managed-schema
添加下面内容。
<field name="myfield" type="text_ik" indexed="true" stored="true" />
<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>
排版:Esc 退出编辑状态下:gg=G
index 为索引,
cd /usr/local/solr/bin
./solr stop -all 关闭 -all表示关闭所有
./solr start -force
1.4 验证
可以在可视化管理界面中找到 myfield 属性进行验证。
中华人民共和国国歌
表示定义一个属性类型。在 Solr 中属性类型都是自定义的。在上面配置中
name="text_ik"为自定义类型。当某个属性取值为 text_ik 时 IK Analyzer 才能生效。
表示向 Document 中添加一个属性。
常用属性:
name: 属性名
type:属性类型。所有类型都是 solr 使用配置的
indexed: 是否建立索引
stored: solr 是否把该属性值响应给搜索用户。
required:该属性是否是必须的。默认 id 是必须的。
multiValued:如果为 true,表示该属性为复合属性,此属性中包含了多个其他的
属性。常用在多个列作为搜索条件时,把这些列定义定义成一个新的复合属性,通过搜索一
个复合属性就可以实现搜索多个列。当设置为 true 时与
结合使用
唯一主键,Solr 中默认定义 id 属性为唯一主键。ID 的值是不允许重复的。
名称中允许*进行通配。代表满足特定名称要求的一组属性。
可以使用 Solr 自带的 Dataimport 功能把数据库中数据快速导入到 solr 中.
必须保证 managed-schema 和数据库中表的列对应。
例如从mysql中读取某一张表,把表中的数据读出来之后按照一定的规则插入到solr的部分字段之中
通过EditPlus远程修改Linux下的配置文件
高级设置
连接
连接成功
修改 solrconfig.xml,添加下面内容
data-config.xml
和 solrconfig.xml 同一目录下新建 data-config.xml
data-config.xml文件中的name和managed-schema文件里面的name一一对应
data-config.xml
managed-schema
向 solr-webapp 中添加三个 jar。在 dist 中两个还有一个数据库驱动。
没有找到数据库驱动jar包就上传
去solr里面找对应的jar包
** 表示通配
复制成功
重启 solr 后,在可视化管理页面中进行数据导入。
注意:
点击导入按钮后,要记得点击刷新按钮。
报错说,内容大小有问题
将100改为10
不报错了
执行查询,数据导入成功
以 XML 格式举例
当 id 不存在时新增,当 id 存在修改。
将值赋给字段,点击提交将数据录入到库中 status为0代表成功
通过id=1000进行查询