Solr基础知识总结

3 篇文章 0 订阅

Solr基础知识总结

Lucene站内搜索需要开发工作量大,主要表现在:索引维护、索引性能优化、搜索性能优化等

solr可以减少程序员工作量,并为搜索引擎提供完备解决方案,在门户、论坛等系统中常用。

solr是Apache下的一个顶级开源项目,采用java开发,可独立运行,运行在jetty、Tomcat等servlet容器中

POST进行增删改,GET进行查询

安装和配置

服务启动:solr.cmd start

服务关闭:solr.cmd stop -all

创建core:solr create corename

创建Collection:solr create -c collectionname

删除core:solr delete corename

删除Collection:solr delete collectionname

post命令:用于导入数据的命令行工具,支持JSON,XML和CSV格式

./bin/post -c films example/films/films.json

目录介绍

bin 包含几个重要脚本,使solr更简单

solr和solr.cmd 是Solr的控制脚本,是启动和停止solr的首选工具
	post提供便于发布内容的命令行接口工具,支持JSON、XML和CSV,也可以导入html、pdf、microsoft 	office、纯文本等
	solr.in.sh和solr.in.cmd用于配置服务安装到系统中
contrib Solr和cpmrtib包含Solr专用功能和附加插件
dist包含主要jar包
docs包含连接到在线的solr文档
example包含演示各种Solr功能的示例
	exampledocs是一系列简单的CSV、XML、JSON文件,可以bin/post在首次使用Solr时使用
	example-DIH包含一些DataImport Handler示例,可以帮助在数据库、电子邮件服务器及Atom中导入结构化内容
	files该目录为本地存储文档word、pdf等提供基本搜索UI
	films包含一组关于电影的强大数据,包扩三种格式:CSV、XML和JSON
license包含Solr使用第三方库的所有许可证
service是solr的核心所在

基本概念

solr.home

默认:solr-7.1.0/server/solr

solr在运行时需要访问主目录solr.home

主目录包含重要配置信息,并且是solr将存储其索引的地方

文件说明:

solr.xml为solr服务器实例指定配置选项
core_name 核心目录
core.properties 为每个核心定义特定的属性
conf	在solrCloud中没有
solrconfig.xml 控制高级行为
managed-schema 描述solr索引文档
data 包含底层索引文件的目录
schema 模式

包含Field、dynamicField、copyField、FieldType的定义

配置文件为managed-schema

Schemaless Mode

无模式模式是一组solr功能,在一起使用时只需要索引数据即可快速构建schema,无需动手编写

功能都是通过solrconfig.xml文件控制,建议关闭schemaless mode模式,若字段类型不正确,不能正确查询

Field 字段

字段属性说明:​

name: 必须属性 字段名
type: 不许属性 字段类型	
indexed: 索引有无,有为true,无为false
stored: 返回有无,有为true,无为false
multiValued: 是否包含多个值,若多个为true,单个为false
required:字段必须有值,否则抛出异常
default:增加文档时为字段设置默认值,防止为空
termVectors:使用MoreLikeThis进行相似度判断,需要设置相关字段为stored
termPositions:保存和向量相关的位置信息,会增加存储开销
termOffsets:保存offset和向量相关的信息,会增加存储开销
douValues:若字段具有文档值,设置为true。文档值在门面搜索、分组、排序和函数查询中会很有用

性能优化:

  • 尽量将所有仅用于搜索,不用于实际返回的字段设置stored=“false”
  • 尽量将所有仅用于返回,不用于搜索的字段设置为indexed=“false”
  • 去掉所有不需要的copyField
  • 为了达到最佳索引大小和搜索性能,将所有文本的字段设置indexed=“false”,使用copyFiled将他们拷贝到整合字段name="text"中,使用整合字段进行搜索
  • 使用server模式运行JVM,同时将log级别调高,避免输出所有请求日志
dynamicField 动态字段

动态字段允许solr索引没有在schema中明确定义的字段。在忘记定义一些字段时很有用,可以让系统更灵活,通用性更强。

动态字段和常规字段类似,除了它名字包含一个通配符外,在索引文档时,若一个字段常规字段中未匹配,则会在动态字段中进行匹配

*_i动态字段,若索引一个cost_i的字段时,该字段不存在会检索*_i

动态字段也是定义在schema.xml中,和其他字段一样,有名词、字段类型、属性

copyField 复制字段

典型场景:若要查询包含java的博客,要查询标题和内容,不能像sql语句那样where tittle like ‘%Java%’ or content like ‘%Java%’,此时定义一个新字段,将title和content复制到该字段,索引时,直接从这个新字段开始查询
注意:若dest由多个source构成,需要制定为multiValued

configSet 配置集目录

当使用solr create命令创建Core或者Collection时,需要使用-d命令制定使用什么配置创建Core或者Collection,若不指定,则默认使用

server/solr/configsets/_default作为Core和Collection配置

默认查询字段-text字段

当我们在查询字段时,如果没有指定字段查询,则使用默认字段text查询

为达到最忌索引大小和搜索性能,对所有文本字段设置"indexed=false",使用copyField将他们拷到整合字段"name=text"字段中,使用整合字段搜索

facet 高级查询

Facet可以为用户提供更友好的搜索体验,在搜索关键词的同时,能够按照Facet的字段进行分组并统计

注意:facet.field指定的字段必须是可indexed的,否则无法查询

版本更新注意

在Solr5以后,schema文件已经不是默认生成好的了,它被取了一个名字managed-schema,并且没有后缀

schema.xml会影响导入之后的query,只显示id和version,可以将其转换为managed-schema即可

增删改查

添加修改
{"id":"1",.....}
删除
<delete>
    <query>id:7</query>
    </delete>
<commit/>
查询
q - 查询字符串,必须的,如果查询所有使用*:*
fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的
sort - 排序
start - 分页显示使用,开始记录下标,从0开始
rows - 指定返回结果最多有多少条记录,配合start来实现分页
fl - 指定返回那些字段内容,用逗号或空格分隔多个
df-指定一个搜索Field
wt - (writer type)指定输出格式,可以有 xml, json, php, phps
hl 是否高亮 ,设置高亮Field,设置格式前缀和后缀

java查询时特殊字符转义处理

/**
 * 转义特殊字符
 * @param input
 * @return
 */
public String transformMetachar(String input){
    StringBuffer sb = new StringBuffer();
    try{
        String regex = "[+\\-&|!(){}\\[\\]^\"~*?:(\\)\\s]";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        while(matcher.find()){
            matcher.appendReplacement(sb, "\\\\"+matcher.group());
        }
        matcher.appendTail(sb);
    } catch(Exception e){
        //TODO
    }
    return sb.toString();
}

总结

本文主要是记录了初学solr时的一些笔记,未深入进行探究,后续会有文章进行研究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值