需要使用solr的向量化功能。作为一个.Neter,将Solr从7.7.0升级到9.8.0的踩坑记录。
1.升级基础镜像
将DockerFile的
FROM solr:7.7.0
调整成
FROM solr:9.8.0
喔嚯,启动失败。
2.升级自定义Plugins的jar包
修改Pom.xml文件,将对应jar包都升级到9.8.0。满心欢喜继续启动容器。接着就异常了。
java.lang.UnsupportedOperationException: VectorizationProvider is internal and can only be used by known Lucene classes.
org.apache.lucene.codecs.Codec: Provider org.apache.lucene.codecs.lucene99.Lucene99Codec could not be instantiated
啥?内部类不能初始化?啥不是已知的Lucene类?难道现在solr不支持自定义token?这么强大有用的功能不应该啊!!!
继续调整其他的看看。
3.升级配置文件
3.1 jetty.xml
solr9.8对应的好像是jetty10。之前是jetty9。启动一个默认solr9.8.0容器。进入容器,复制黏贴搞定。
3.2 solrconfig.xml
有许多自定义配置,调整一下下面的再说。
<luceneMatchVersion>9.8.0</luceneMatchVersion>
4. 好像跑起来了
进度2的问题卡了一天,问了gpt可能还搞错方向了。指示java升级之后Plugin啥安全限制,需要加配置。
SOLR_OPTS="$SOLR_OPTS --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=org.apache.lucene/internal.vectorization=ALL-UNNAMED" \
配了半天没效果。下班回家。
今天早上来继续看。偶然之间,运气比较好。看到
solr和lucene的版本不是一一对应的。lucene版本好像高一点。不知道前人为啥要单独引入lucene的包,直接引入solr包应该就ok了。调整一下lucene的包版本。启动起来了。
UnsupportedOperationException known Lucene classes,看起来还是版本不对导致的。估计再pom里面移除lucene也ok,有空试试。