0%

Solr 7.7.1 项目经验

目前最新版已经是 8.x,但 Solr 似乎会平行发布版本。比如6.x的版本仍然会在7.7.1发布后更新

粗略的基础知识

  • Solr 中的 Core 可以理解成一个单独的 Database

  • managed-schema 的意义是配置当前的Core的字段,以及分字段的单词分析,例如 text_en 等。注意必须提前配置好,才能进行数据的导入工作,否则数据即使导入成功也无法按指定的索引流程执行分词

  • solrconfig.xml 的意义是配置全局 Solr,一般只是添加 queryParser,这样可以使用自定义的 QParserPlugin

部署

  • 部署的策略是全部采用 Docker,将所有配置文件全部单独做一个 Docker Image。这样的目的是为了完全分离数据与配置,同时方便打包

可直接在 root权限下运行的 Dockerfile 参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
FROM solr:7.7.1

# 强制改成 root 运行
USER root

# 设置默认的 Core
RUN mkdir -p /opt/solr/server/solr/test1/data && mkdir -p /opt/solr/server/solr/test2/data && mkdir -p /opt/solr/server/solr/test3/data && cp -r /opt/solr/server/solr/configsets/_default/conf /opt/solr/server/solr/test1/ && cp -r /opt/solr/server/solr/configsets/_default/conf /opt/solr/server/solr/test2/ && cp -r /opt/solr/server/solr/configsets/_default/conf /opt/solr/server/solr/test3/

# 设置用户名与密码
COPY security.json /opt/solr/server/solr

# 设置Jetty并发数
COPY jetty.xml /opt/solr/server/etc

EXPOSE 8877

CMD ["solr-foreground", "-f", "-force"]

# 调试用命令,注意IP地址需要与服务器地址完全一致
#CMD ["solr-foreground", "-f", "-force", "-a", "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=10.117.2.33:18988"]

自定义 TokenFilter

TokenFilter 的作用,是用来针对一句话做最终的关键字筛选。
例如一句话是 I eat apple。如果使用默认的 text_en,那么最终结果就是 eat apple,而 I 会被隐藏
如果希望 eat 是作为 ate 来索引关键字,或者 apple这个关键字需要其他特殊处理,就需要自定义 TokenFilter

自定义 QParserPlugin

为了能够满足项目要求的排序,可能原生的 boost 无法满足要求时

一些建议

  • 原始的 solrconfig.xml 内包含大量预定义配置,请删除用不到的,只保留用得到的,不要保留模棱两可的配置