中文全文搜索、多数据源
1.中文全文搜索
许多数据库都有全文搜索的功能,比如mysql、postgresql、mongodb(不支持中文分词)
比较专业的全文搜索,则是es,但是有一定的运维成本和学习成本
要理解全文检索,有两个概念比较关键:倒排索引、中文分词
倒排索引:可以先理解什么叫正排索引,通过文章id,去获取文章内容。倒排索引就是根据文章内容(关键字)获取文章id。可以参考维基百科
中文分词:英文分词是按照空格分词,但是中文就比较麻烦,许多数据库都要安装中文分词插件。推荐结巴分词。
mysql自带中文的全文检索,所以使用语法比较简单。
postgresql没有中文的全文检索,安装插件又比较麻烦,所以可以采用应用层分词的方案。
关于 PostgreSQL 全文检索的实战 – 中文分词、查询、索引、权重、排序
2.多数据源
其成熟的方案有:baomidou(轻量),sharding-jdbc(比较重)
个人比较倾向于baomidou.可以实现多个从库的自动负载
踩的坑:
高版本的mysql,需要设定useSSL=false/true
不建议默认走从库,特别是读写分离的时候。
spring:
datasource:
dynamic:
# 设置默认的数据源或者数据源组,默认值即为master
primary: master
# 严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
strict: false
datasource:
master:
driver-class-name: org.postgresql.Driver
password: 123456
url: jdbc:postgresql://192.168.56.101:5432/postgres
username: postgres
slave_1:
url: jdbc:mysql://192.168.56.101:3306/file_test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
slave_2:
driver-class-name: org.postgresql.Driver
password: 123456
url: jdbc:postgresql://192.168.56.101:5432/postgres
username: postgres
# 自定义负载均衡策略。slave组下有;多个个数据源,当用户使用 slave 切换数据源时会使用负载均衡算法。系统自带了两个负载均衡算法 LoadBalanceDynamicDataSourceStrategy 轮询,是默认的。 RandomDynamicDataSourceStrategy 随机的。
strategy: com.baomidou.dynamic.datasource.strategy.LoadBalanceDynamicDataSourceStrategy