mongodb全文搜索解决方案(lucene+IKAnalyzer)

来源:互联网 发布:香港域名注册不备案 编辑:程序博客网 时间:2024/05/21 11:03

生活中IT男是最痛苦的!在工作中会有各种问题出现,各种各样的坑要填!~

下面是我碰到的一个技术难题,用了两天时间才解决。感觉累,但是觉得这个方法能够满足需求吧。

拿出来和大家分享下!

一、环境

      数据库分类:数据生产库(mysql5.5)、前台展示库(mysql5.7)、全文检索库(MongoDB3.4)

      服务器:生产系统(Windows)、前台展示(Linux6.5)、全文检索(Linux6.5)

二、需求分析 

      生产环节:通过软件生产数据并标引入库到数据生产库(mysql5.5),生产环节不详细说。

      前台展示库:根据数据的属性创建维度表,创建的对象有内容和书属性事实表,维度表有区域、专辑等。

      全文检索库:由于数据量非常大,上千万条数据,根据需求必须在内容中进行全文检索,mysql对上千万级数据全文检索是非常薄弱和慢的,为了提高检索性能选择了mongodb+luncene+IkAnalyzer进行配合。

三、设计思路

      根据需求整体流程中难点有前台展示库(mysql5.7)和NoSql数据库(MongoDB)之间的数据同步,生产数据库和前台数据库之间的数据同步及生产数据转换为前台可以展示的数据。IT人喜欢专研,要不就不做,要做就做最自动化的东西。

   实现方式: 生产数据库———》ETL工具————》前台数据库————》tungsten————》mongodb————》lucene+IKAnalyzer

介绍:

ETL工具在生活中非常多,由于几大比较大的ETL工具都是收费的,我就选择了开源,开源的东西还是能满足日常的需求的,我like开源,我选择了kettle,详细的做法这个网上很多案例,不详细介绍。

前台数据库和mongodb实时同步的问题,这个问题以前只是接触过,而且这种开源的东西在国内网站上面压根找不到任何资料和下载的地方,同时我也要感谢我们国家把万能的google封杀了

下载tungsten我使用的是5.0的版本哦,最新版本不知道会不会很问题,下面直接上配置过程吧:

一、linux系统环境配置

此处省略N个字,假如Linux系统都不会配置的话这个玩意就别弄了,selinux、iptable、network、hostsname、等等等等一切。

1、192.168.67.128 #mysql主机

配置hosts(配置Host很重要的大家严格按照我的配置方法配置)

~] vim  /etc/hosts

127.0.0.1 localhost
192.168.67.128 host1
192.168.67.129 host2

配置打开页面数(默认是1024)

~] ulimit -n

65535

此处Linux6.5的配置有2个地方

1、~]# vim /etc/security/limits.conf
2、 ~]# vim /etc/security/limits.d/90-nproc.conf
测试主机(返回的是不是你配置的HOSTS)

~] uname -n

测试ip地址(返回是不是只有一个name)

~] hostname –ip-address

创建密钥对

~] ssh-keygen -t rsa

~] cp .ssh/id_rsa.pub .ssh/id_rsa /home/tungsten/.ssh

把公钥放到 .ssh/authorized_keys文件中,128 的公钥放到 129,129 的公钥放到 128

修改mysql配置文件

~] vim /etc/my.cnf

server-id = 128
open_files_limit = 65535
log-bin = mysql-bin
sync_binlog = 1
max_allowed_packet = 52m
default-storage-engine = InnoDB
innodb_flush_log_at_trx_commit = 2
binlog-format = row
binlog-row-image = full

详细参数说明见官文(tungsten只支持InnoDB

安装tungsten配置过程从tungsten官方网站上面找到的

 ~]  mkdir /opt/continuent/soft
上传安装文件并解压

tar -zxvf tungsten-replicator-5.0.1-138.tar.gz -C/opt/continuent//soft/

cd  /opt/continuent//soft/tungsten-replicator-5.0.1-138/

安装tungsten必须JDK1.7以上   还有必须安装ruby

yum -y install java-1.7.0-openjdk*

yum -y install ruby

./tools/tpm install alpha --info --master=192.168.67.128 --datasource-mysql-conf=/etc/my.cnf --enable-heterogenous-master=true --replication-user=tungsten --replication-password=nihao111 --install-directory=/opt/continuent/alpha --start-and-report

echo $?//假如返回是0就是正确的

在安装目录的bin下面使用trepctl status查看状态出现online就是正常状态

state                  : ONLINE
timeInStateSeconds     : 339281.586
timezone               : GMT
transitioningTo        :
uptimeSeconds          : 339282.423
useSSLConnection       : false
version                : Tungsten Replicator 5.0.1 build 138
Finished status command...

2、192.168.67.129 #mongodb主机

系统配置和Mysql主机一样,这个就不说了我们从mongodb安装开始讲起

我这里直接是Yum安装的

yum install -y mongodb-org

安装后直接用命令启动 :service mongod start

发现会报错,这个时候我就郁闷了什么情况了,查看/etc/mongo.conf 发现日志的存放位置,然后在日志的存放位置查看日志,发现是无法创建数据目录。。。。。。。。

看来被坑了,用root用户还没有权限,这是什么情况。。。。。。。

然后我直接在根目录下面创建了一个数据目录,然后修改mongodb的配置文件指定新创建的数据目录,就OK了。。。。。。。

然后就是解压tungsten然后安装步骤和mysql服务器一样命令如下:

./tools/tpm install alpha --info --datasource-type=mongodb --master=192.168.67.129--members=192.168.67.128--enable-heterogenous-slave=true --topology=master-slave  --install-directory=/opt/continuent/alpha --start-and-report

大家还是认真的看下还是有不同的。一个是主,一个是从,然后查看下状态和mysql一样查看下状态是不是Online ,这样就OK了,。。。。。。。。。

明天继续为大家更新。。。。。。。

有急需的请加QQ:270054421





原创粉丝点击