solrCloud集群搭建(solr-6.5.1,zookeeper-3.4.10)
Solr 是一个基于 Apache Lucene 之上的搜索服务器,它是一个开源的、基于 Java 的、运行在Servlet容器(如Apache Tomcat或Jetty)的信息检索库。它旨在驱动功能强大的文档检索应用程序 - 无论您需要根据用户的查询将数据服务到何处,Solr 都可以为您服务。
下面是一个如何将 Solr 集成到应用程序中的示例:
采用伪集群部署方式,在同一台服务器上部署3个zookeeper,3个solr服务。结构如下图:
1,下载压缩包,zookeeper,solr
2,部署zookeeper集群,(部署单个,拷贝多个)
3,solr部署
solr-6.5.1.tgz解压命名为solr-1
4,solr关联zookeeper
配置solr和zookeeper,在solr-1/bin 目录下 ,solr.in.sh文件中,加入如下参数,并复制solr-1,粘贴为solr-2,solr-3。
ZK_HOST="10.1.88.101:2281,10.1.88.101:2282,10.1.88.101:2283"
5,更改solr-2,solr-3的启动端口
因为是在同一台机器上部署,所以要更改各个solr节点的默认启动端口。以solr-1为例,默认是8983,我改为8985.
/srv/new_solr/solrCloud/solr-1/bin 目录下的 solr.in.sh 文件
SOLR_PORT=8985
/srv/new_solr/solrCloud/solr-1/server/etc 目录下的 jetty-https.xml文件
<Set name="port"><Property name="solr.jetty.https.port" default="8985" /></Set>
执行启动命令
/srv/new_solr/solrCloud/solr-1/bin/./solr start
solr-2,solr-3也是一样
启动成功后,进入一个节点,我的是 http://10.1.88.101:8985/solr/#/ 左侧能看到Cloud菜单,即是Cloud模式
6,创建collection的配置文件并上传。
我的配置文件是myconf,这个可以从/srv/new_solr/solrCloud/solr-1/server/solr/configsets/ 下复制sample_techproducts_configs 文件夹到solr-1的根目录,命名为myconf,作为要创建的collection的配置文件名。
cp -rf /srv/new_solr/solrCloud/solr-1/server/solr/configsets/sample_techproducts_configs/* /srv/new_solr/solrCloud/solr-1/myconf
进入/srv/new_solr/solrCloud/solr-1/server/scripts/cloud-scripts 目录,利用./zkCli.sh 上传solr的配置文件到zookeeper,如下命令,myconf是要上传的配置文件名,file_bank是上传后的显示名。
cd /srv/new_solr/solrCloud/solr-1/server/scripts/cloud-scripts/
./zkcli.sh -zkhost 10.1.88.101:2281,10.1.88.101:2282,10.1.88.101:2283 -cmd upconfig -confdir /srv/new_solr/solrCloud/solr-1/myconf/ -confname file_bank
7,创建collections
上传成功后,在solr 后台创建collection时可以看到之前命名的配置文件file_bank。
创建时参数解析
name:将被创建的集合的名字
numShards:集合创建时需要创建逻辑碎片的个数
replicationFactor:分片的副本数。replicationFactor(复制因子)为 3 意思是每个逻辑碎片将有 3 份副本。
maxShardsPerNode:默认值为1,每个Solr服务器节点上最大分片数(4.2新增的)
注意三个数值:numShards、replicationFactor、liveSolrNode(当前存活的solr节点),一个正常的solrCloud集群不容许同一个liveSolrNode上部署同一个shard的多个replic,因此当maxShardsPerNode=1时,numShards*replicationFactor>liveSolrNode时,报错。因此正确时因满足以下条件:numShards*replicationFactor<liveSolrNode*maxShardsPerNode
如有错误collections,执行删除语句
http://10.1.88.101:8985/solr/admin/collections?action=DELETE&name=file_bank
8,分词器配置,我选的是smart分词,这个lucene-analyzers-smartcn-6.5.1.jar包是在/srv/new_solr/solrCloud/solr-1/contrib/analysis-extras/lib下,所以修改solrconfig.xml,添加分词器jar包位置
<lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs" regex=".*\.jar" />
修改manged-schema.xml,增加一个新的fileType 类型,并指定分词类型是smart
<fieldType name="text_smart" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>
</fieldType>
创建一个新的field 命名为 file_text_search_all ,并将需要分词的字段copy进来。
<field name="file_text_search_all" type="text_smart" indexed="true" stored="true" multiValued="true" />
<!-- 为多个field指定一个共同的别名,通过这个别名进行query就能够同时对所有field进行搜索 -->
<copyField source="fileBank_teacherName_s" dest="file_text_search_all"/>
<copyField source="fileBankName_s" dest="file_text_search_all"/>
<copyField source="fileSchoolName_s" dest="file_text_search_all"/>
<copyField source="fileMajorName_s" dest="file_text_search_all_s"/>
<copyField source="fileSubjectName_s" dest="file_text_search_all"/>
<copyField source="fileTypeName_s" dest="file_text_search_all"/>
<copyField source="fileYear_s" dest="file_text_search_all"/>
9,更新配置文件,每次修改manage-schema,都需要执行上传操作,即下述命令
cd /srv/new_solr/solrCloud/solr-1/server/scripts/cloud-scripts/
./zkcli.sh -zkhost 10.1.88.101:2281,10.1.88.101:2282,10.1.88.101:2283 -cmd upconfig -confdir /srv/new_solr/solrCloud/solr-1/myconf/ -confname file_bank
10,查看分词示例
collection选择file_bank,在Analysis菜单中,选择file_text_search_all 字段,输入待分词文本
分词结果如下
11,配置停词表,stopwords.txt
12,solrj的使用
连接SolrCloud,创建CloudSolrClient
13,批量创建时提高提交速度,设置软提交,硬提交
<autoCommit>
<maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
<maxDocs>100000</maxDocs>
<openSearcher>false</openSearcher>
</autoCommit>
<autoSoftCommit>
<maxTime>${solr.autoSoftCommit.maxTime:15000}</maxTime>
<maxDocs>10000</maxDocs>
</autoSoftCommit>
14,使用中遇到问题---相似度算法
solr6.5的变化
托管模式现在是默认的
当 solrconfig.xml 没有明确定义 <schemaFactory/> 的时候,Solr 的默认行为现在依赖于 solrconfig.xml 定义的 luceneMatchVersion。当 luceneMatchVersion < 6.0 时,ClassicIndexSchemaFactory 将继续用于后向兼容,否则将使用 ManagedIndexSchemaFactory 的实例。
这种变化最显著的影响是:
- 现有的 solrconfig.xml 文件被修改为使用 luceneMatchVersion >= 6.0,但没有明确配置 ClassicIndexSchemaFactory,将其 schema.xml 文件自动升级到managed-schema 文件。
- 现在将默认启用通过 Schema API 进行的模式修改。
默认的相似性改变
当 Schema 没有明确地定义全局 <similarity/> 时,Solr 的默认行为将依赖于 solrconfig. xml 中指定的 luceneMatchVersion。当 luceneMatchVersion < 6.0 时,将使用 ClassicSimilarityFactory 的实例,否则将使用 SchemaSimilarityFactory 的实例。最值得注意的是,这种改变意味着用户可以利用每个字段类型的相似性声明,并且需要明确声明 SchemaSimilarityFactory 的全局用法。
无论是明确声明还是作为隐式全局默认值使用,当字段类型不声明明确 <similarity/> 时,SchemaSimilarityFactory 的隐式行为也被更改为依赖于 luceneMatchVersion。当 luceneMatchVersion < 6.0 时,将使用 ClassicSimilarity 的实例,否则将使用 BM25Similarity 的实例。可以在 SchemaSimilarityFactory 声明中指定 defaultSimFromFieldType init 选项来更改此行为。请查看 SchemaSimilarityFactoryjavadocs 了解更多详情
TF---词频 标题分词 1/100
IDF---逆向文件频率 命中率 log(1000/10)=2
TF*IDF=0.02
搜索(好人做小事)
做大好事
我大好人
做好事
好人
做大事
好人小事是大事
小 (3*1)
。
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器