继续跟着这个走:
docker run -itd --name centos-anyq -p 0.0.0.0:8888:8999 centos:centos7
# 这句话其实有问题,把容器放到后台执行了
docker exec -it centos-anyq /bin/bash
# 把容器放回到前台
demo查看
# 获取anyq定制solr,anyq示例配置
cp ../tools/anyq_deps.sh .
sh anyq_deps.sh # 这步是下载一个model# 启动solr, 依赖python-json, jdk>=1.8
cp ../tools/solr -rp solr_script
sh solr_script/anyq_solr.sh solr_script/sample_docs
# 如果没有java 这句会报错 可以按照上面的安装再走一次
java -version
> java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)#运行
./run_server# 退出记得 ctrl+Z 不要直接关掉,不然端口会被占用
如果重新进入docker 记得切换到build目录
cd /home/AnyQ-master/build/# 如果端口不幸被占用 查看容器内的端口
netstat -tnlp | grep 8999
# yum install net-tools
> tcp 0 0 0.0.0.0:8999 0.0.0.0:* LISTEN 111723/./run_server > lsof -i:8999
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
run_serve 111723 root 3u IPv4 23682314 0t0 TCP *:bctp (LISTEN)
run_serve 111723 root 9u IPv4 30077501 0t0 TCP a14447576c14:bctp->192.168.30.159:11545 (ESTABLISHED)
运行之后,访问自己的服务器ip:8888就可以看到:
或者可以 服务器ip:8888/anyq?question=使用什么帐号? 。 不过我返回的东西很奇怪。。
似乎编码有些问题。然后反应过来可以在控制台查看啊,浏览器的开发者工具。(但是我不太会,但是我知道人家这个是任务台搞出来的。)
但是后台log信息就很棒咧
或者容器内调用 curl "127.0.0.1:8999/anyq?question=需要使用什么账号登录"
。
也可以多尝试尝试其他的例子,比如:
仔细查看输出,可以发现,anyQ的大致步骤
simnet_paddle_sim.cpp
这个文件,可以点击这里了解这个文件 SimNet是百度自然语言处理部于2013年自主研发的语义匹配框架,该框架在百度各产品上广泛应用,主要包括BOW、CNN、RNN、MM-DNN等核心网络结构形式,同时基于该框架也集成了学术界主流的语义匹配模型,如MatchPyramid、MV-LSTM、K-NRM等模型。SimNet使用PaddleFluid和Tensorflow实现,可方便实现模型扩展。使用SimNet构建出的模型可以便捷的加入AnyQ系统中,增强AnyQ系统的语义匹配能力
jaccard_sim.cpp
这个文件,可以点击这里查看详细情况,其实这个文件挺简单的,就是jaccard相似度,Python里调一行的事情,换成c++加速了。 Jaccard index , 又称为Jaccard相似系数(Jaccard similarity coefficient)用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。
rank_strategy.cpp
文件,点击这里查看详细情况也可以尝试其他的问题,比如:今日日期
,但是没有返回值,所以自带的FAQ问答对集合非常有限。可能需要自己添加一些。
从这个数据上猜测这个anyq是不是就是百度AI平台的人工客服,试了一下,应该不是。
找了一下,这个anyq的数据来自solr/sample_docs
所以接下来就是尝试加入自己的数据进行尝试了。
之前保存过镜像了,刚好试一把,
参考
注意:
--network=host
来指定的,host模式下的容器直接使用宿主机的 IP 地址与外界进行通信。docker run
--name definedName(自定义容器名称)
-p 8080:8080(端口映射 本机端口: docker端口 )
-p 8081:8081
-p ....
-d imagesName(镜像名称)
实际使用以下代码:
# -p -p ip:hostPort:containerPort
# -p 8888:8999 这里多个端口映射 其中 solr端口 本机和容器端口号用了一样的
docker run -itd --name anyq-faq -p 0.0.0.0:8886:8999 -p 0.0.0.0:8900:8900 anyq/base # 如果不小心创建失败,提示容器名称被占用 可以
docker stop anyq-self
# 暂停容器
docker rm anyq-self
# 删除容器# 如果是端口名称被占用 要么换一个端口 要么找到占用端口的那个容器 删了docker exec -it anyq-self /bin/bash
这里注意,虽然基于的这个镜像是之前配好的容器保存的,但是java还是没有配置在系统路径中,所以每次重新开一个容器,都要重新配置一次java的系统路径
java -version
> bash: java: command not foundcd /home
##6.配置java环境
export PATH=`pwd`/jdk1.8.0_171/bin:$PATH> java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)# 这步可以不执行
cd AnyQ-master/build/
sh anyq_deps.sh # 这步是下载一个model# 这步需要执行,启动solr脚本,不然会报错
# AnyQ RAW: curl_easy_perform Failed[Couldn't connect to server];
sh solr_script/anyq_solr.sh solr_script/sample_docs# 然后运行服务
./run_server
然后就可以像之前一样正常启动,看看效果了。浏览器里输入:XXXX:8886/anyq?question=使用什么账号?
至此,保存为镜像,验证基于此镜像重新弄容器的步骤验证完成。
注意,如果先打开8900这个solr的端口,再去访问8886界面似乎会失败,先访问后者,再访问前者就没事。
访问http://ip:8900/solr/
这个链接,注意,这里不能只访问http://ip:8900
,必须到后面的solr
,不然会报错。
然后就会看到solr的这个简易的界面
要稍微了解一下这个solr,可以查看下面的solr简介
部分。
ctrl+Z # 暂停当前的 run_serverjobs # 看一下这个被终止的run_server服务的后台序号
> [1]+ Stopped ./run_serverbg 1
# 放到后台继续运行 然后CLI就暂时空出来可以看其他东西了
找找这个目录,其实就在build
目录下
查看一下这个目录,可以看到有以下内容
网上大部分其他关于solr的博客主要都会看一下这个example目录中solr目录,这里先看一下example目录(注意,以下内容皆为solr的示例,而不是anyq的数据)
再看一下solr目录
这就与什么是Solr,它能为我们解决什么问题,怎么用? 文章中示例的图一模一样了。里面出现了collection1
这个文件夹
这里有16条文档,刚好和之前anyq测试时看到的那个数据集FAQ数量相同。仔细看一下collection文件夹的内容
其中那个core.properties
配置文件里只有一行字:name=collection1
。另外,data文件夹的结构如下,查看后,以下文件打开全都是乱码字符,找不到可以使用的内容。
conf配置文件夹中的conf/managed-schema.xml
文件就是对数据库的模式描述,主键,还有样本的属性等等。
conf/schema.xml.bak
文件。另外,可以看一下这个和collections
同级的solr.xml
配置文件
<solr><solrcloud><str name&#61;"host">${host:}str><int name&#61;"hostPort">${jetty.port:8983}int><str name&#61;"hostContext">${hostContext:solr}str><int name&#61;"zkClientTimeout">${zkClientTimeout:30000}int><bool name&#61;"genericCoreNodeNames">${genericCoreNodeNames:true}bool>solrcloud><shardHandlerFactory name&#61;"shardHandlerFactory"class&#61;"HttpShardHandlerFactory"><int name&#61;"socketTimeout">${socketTimeout:0}int><int name&#61;"connTimeout">${connTimeout:0}int>shardHandlerFactory>solr>
solr简介
简单来说&#xff1a;Solr是一个独立的企业级搜索应用服务器&#xff0c;它对外提供类似于Web-service的API接口。用户可以通过http请求&#xff0c;向搜索引擎服务器提交一定格式的XML文件&#xff0c;生成索引&#xff1b;也可以通过Http Get操作提出查找请求&#xff0c;并得到XML格式的返回结果。
Solr是一个可扩展的&#xff0c;可部署&#xff0c;搜索/存储引擎&#xff0c;优化搜索大量以文本为中心的数据。
和数据库的区别&#xff1a;
无意义的尝试
********无意义的尝试 可以不加privileged这个参数的 ********
********按照以前的方式创建就没问题 那个博主写的有问题********
docker run -it --name&#61;anyq-self --ipc&#61;host -p 8886:8999 --privileged&#61;true anyq/base /usr/sbin/init
> [FAILED] Failed to start LSB: Bring up/down networking.
See &#39;systemctl status network.service&#39; for details.
# 使用上句报错了 不加--network&#61;host 就会报错。> docker run -itd --name&#61;anyq-faq -p 0.0.0.0:8886:8999 --privileged&#61;true --network&#61;host anyq/base /usr/sbin/init
WARNING: Published ports are discarded when using host network mode
# 但是这里使用--network&#61;host 虽然docker run -itd --name&#61;anyq-host --privileged&#61;true --network&#61;host anyq-host /usr/sbin/init
docker run -itd --name centos-anyq -p 0.0.0.0:8888:8999 centos:centos7
使用--privileged&#61;true
和/usr/sbin/init
参数确保在容器中可以用systemctl
命令&#xff0c;关于这个systemctl
命令&#xff0c;参考&#xff1a;Systemd 入门教程&#xff1a;命令篇
[FAILED] Failed to start LSB: Bring up/down networking.
See ‘systemctl status network.service’ for details.
关于警告信息&#xff1a;