原创

docker-solr-php业务模拟

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://guoruibiao.blog.csdn.net/article/details/98647076

最近在整理公司的一些基础服务,正好拓展下自己的知识面,先不管程度多深,最起码打个照面,说不一定未来就用到了,概念性的东西理解了,后面也就差业务逻辑了,变通再多,也是在这些基础之上的。

环境搭建,既要配Java环境,又要下载一些软件,做好适配,显得比较麻烦,所以干脆借助docker,一下子门槛就降下来了。

下载镜像

docker pull solr:7.4.0
➜  ~ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
golang              latest              be63d15101cb        2 weeks ago         814MB
redis               latest              3c41ce05add9        8 weeks ago         95MB
mysql               latest              990386cbd5c0        2 months ago        443MB
solr                7.4.0               9a5ace062a3d        5 months ago        679MB
nsqio/nsq           latest              c7741268d036        11 months ago       52.3MB

然后是让服务跑起来

docker run -d -p 8983:8983 --name=mysolr -t solr:7.4.0

看下服务启动状态

➜  ~ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS                    NAMES
5a7472f97058        solr:7.4.0          "docker-entrypoint.s…"   3 hours ago         Up 3 hours              0.0.0.0:8983->8983/tcp   mysolr
ae58202e82d1        mysql               "docker-entrypoint.s…"   8 days ago          Exited (0) 4 days ago                            MY_MYSQL

这个时候,访问下 http://localhost:8983 其实就可以看到服务已经起来了。

到这,简单的服务算是差不多结束了,但是为了模拟真实的场景,还是来一个小例子,比如有些业务场景是搜索用户 ,我们就可以建立一个core(就好比是mysql里的一个db,这个业务就全存储在这个core里面了)。

docker exec -it --user=solr mysolr bin/solr create_core -c mycore

虽然web页面也有一个core_admin的栏,提供创建core的接口,但是那个总会报没有对应的xml配置文件的错误,所以还是在命令行里进行创建,这样最起码不会出错。

巧妇难为无米之炊, 服务搭建完了,剩下的就是CRUD了,公司用的PHP,所以这里也用PHP作为client来进行模拟,其他语言,也是类似的。

借助apache_search 就可以了。下载下来之后放到自己的测试workspace下,就可以使用了。

<?php
// solr_search_demo.php
include("Apache/Solr/Service.php");

$solr = new Apache_Solr_service("localhost", "8983", "/solr/mycore");
if(!$solr->ping()) {
    die("Solr server not responding.");
}

$data = array(
    [
        "userid" => 2614677,
        "nickname" => "太阳宫李荣浩",
        "age" => 25,
        "gender" => 1,
    ],
    [
        "userid" => 1000023,
        "nickname" => "dasdsdasdsfdf",
        "age" => 18,
        "gender" => 0,
    ],
    [
        "userid" => 2614675,
        "nickname" => "张三",
        "age" => 29,
        "gender" => 1,
    ],
    [
        "userid" => 1000015,
        "nickname" => "abcdef",
        "age" => 22,
        "gender" => 0,
    ],
    [
        "userid" => 2153005,
        "nickname" => "隔壁家的小明",
        "age" => 27,
        "gender" => 1,
    ],
    [
        "userid" => 1000006,
        "nickname" => "隔壁家的小李",
        "age" => 23,
        "gender" => 0,
    ],
);
// 添加索引
$documents = [];
foreach ($data as $key=>$value) {
    $part = new Apache_Solr_Document();
    foreach ($value as $key2=>$value2) {
        $part->$key2 = $value2;
    }
    $documents[] = $part;
}
$solr->addDocuments($documents);
$solr->commit();
$solr->optimize();
// 查询
$offset = 0;
$limit = 10;
$sort = "age asc";

$rs = $solr->search("gender:0", $offset, $limit, array("sort"=>$sort));
foreach ($rs->response->docs as $doc) {
    var_dump($doc);
}

摘抄自https://blog.csdn.net/hzcyclone/article/details/7006354

php solr_search_demo.php

terminal 测试结果

光是这样,不太明显,下面去web端实战测试下。
web端查询结果

至此,一个简易的模拟算是结束了,剩下的有兴趣还可以创建多个core,然后用不同的脚本去进行CRUD。

用完后,嫌浪费宿主机存储空间,就可以rm掉了。

docker ps -a
docker stop container-id
docker rm container-id
docker rmi image-id

有了docker,就是清爽,再也不用担心装一大堆软件,最后卸载时抓耳挠腮的费心了。

文章最后发布于: 2019-08-06 21:34:08
展开阅读全文
0 个人打赏
私信求帮助

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览