在云模式下设置 Apache Solr

Sum*_*mit 0 lucene solr solrcloud solr4 apache-zookeeper

我必须执行以下操作:

  1. 我必须在 2 个服务器/节点上部署 Solr。
  2. 在另一台服务器上部署 Zookeeper。
  3. 将自定义配置上传到 Zookeeper
  4. 创建具有 2 个分片和 2 个副本的自定义集合

Solr 7.4.0 和 Zookeeper 版本: 3.4.12

我做了以下事情:

设置动物园管理员:

  • 创建了一个 Zookeeper 数据文件夹并创建了一个 Zoo.conf 并将 dataDir 放在那里。
  • 开始使用 Zookeeper./zkServer.sh start

设置 Solr:

  • 使用以下命令启动 Solr:

    ./solr start -cloud -s /home/demo/LocalFolder/Downloads/SolrHome -p 8987 -z localhost:2181

  • 尝试使用以下方式在 Zookeeper 中上传配置: ./solr create -c mycollection -d /media/sf_VM/Dump/conf

它给了我一个例外:

Caused by: javax.servlet.UnavailableException: Error processing the request. CoreContainer is either not initialized or shutting down.
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:341)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:323)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1634)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:219)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
    ... 17 more
</pre>
Run Code Online (Sandbox Code Playgroud)

我搜索了很多页面并看过 Solr 教程,但他们使用了默认示例。我只是没有任何一步一步的想法

  1. 如何在Zookeeper中上传配置?
  2. 然后我需要做什么来创建一个指向该配置的集合。我希望该集合有 2 个分片和 2 个副本。
  3. solr.xml 将在哪里。如果它应该在 Zookeeper 中,我该如何将其上传到那里
  4. 如何在 Zookeeper 中看到配置已上传?

我知道这个问题可能是重复的。我已经阅读了几篇文章,但无法提出解决方案。请帮忙。

Sum*_*mit 5

好吧,我知道如何设置了。请注意,我已从不同站点阅读了这些步骤并一步步收集到此处:

1. 设置ZooKeeper:

这用于将集合特定的配置文件存储在中央空间中并使用名称进行映射。稍后我们可以使用此名称来创建指向此配置的集合。此配置与您在以下文件夹中找到的配置相同: solr-7.4.0\server\solr\configsets\sample_techproducts_configs\conf

1.1 下载最新的Zookeeper。我用过3.4.12

1.2 解压下载的压缩包并将conf/zoo_sample.cfg复制到conf/zoo.cfg

1.3 修改zoo.cfg:

1.3.1 将 dataDir 更改为要保存所有集群配置数据的目录。 dataDir=/var/zookeeper/data

1.3.2 添加所有 Zookeeper 服务器的信息:我只使用了 1 个 ZooKeeper 服务器,所以这不是必需的。如果您想添加更多服务器,请访问以下链接:

DZone 教程

阿帕奇教程

1.3.3 启动ZooKeeper使用(进入zookeeper-3.4.12/后):

./bin/zkServer.sh start-foreground conf/zoo.cfg

或者

./bin/zkServer.sh start conf/zoo.cfg

注意:您可以使用以下命令停止 ZooKeeper:

bin/zkServer.sh stop

1.3.4 ZooKeeper状态:

点击下面的:

bin/zkServer.sh status

或者在连接时执行telnet localhost 2181并点击stats

2. 设置Solr

2.1 下载Solr

2.2 从.tar 文件中提取install_solr_service.sh。Solr 包含一个服务安装脚本 (bin/install_solr_service.sh),可帮助您在 Linux 上将 Solr 安装为服务。欲了解更多信息请点击这里

tar -xzf solr-7.4.0.tgz solr-7.4.0/bin/install_solr_service.sh --strip-components=2

2.3 使用上述脚本将 Solr 安装为服务:

sudo bash ./install_solr_service.sh solr-7.4.0.tgz

这还将提取 solr-7.4.0.tgz 到/opt/solr

2.4 转到/opt/solr并执行以下操作:

mkdir solr/server/solr2 mkdir solr/server/solr3 mkdir solr/server/solr4

cp solr/server/solr/solr.xml solr/server/solr2 cp solr/server/solr/solr.xml solr/server/solr3 cp solr/server/solr/solr.xml solr/server/solr4

2.5 更改solr.xml中的jetty端口。对上述步骤中提到的所有 3 个 solr.xml 执行此操作:

vi solr/server/solr2/solr.xml

搜索端口 8983 并将其更改为 8984(对于 solr2),将其更改为 8985(对于 solr3),将其更改为 8986(对于 solr4)

2.6 停止8983处运行的Solr

root@dev-base:/opt/solr/bin# ./solr stop -p 8983

2.7 启动所有solr实例:

root@dev-base:/opt/solr# bin/solr start -c -s server/solr -p 8983 -z localhost:2181 -noprompt -force root@dev-base:/opt/solr# bin/solr start -c -s server/solr2 -p 8984 -z localhost:2181 -noprompt -force root@dev-base:/opt/solr# bin/solr start -c -s server/solr3 -p 8985 -z localhost:2181 -noprompt -force root@dev-base:/opt/solr# bin/solr start -c -s server/solr4 -p 8986 -z localhost:2181 -noprompt -force

注意:出于安全原因,不建议以 root 身份运行 solr。

2.8 查看Solr状态:

root@dev-base:/opt/solr# bin/solr status

3 进行自定义配置

3.1 将conf目录复制solr-7.4.0\server\solr\configsets\sample_techproducts_configs\conf到另一个位置(In my case it is /media/sf_VM/Dump/new/conf )

3.2 更改managed-schema里面的文件conf以指定您正在使用的字段。

4 将配置上传到 ZooKeeper:

root@dev-base:/opt/solr# bin/solr zk -z localhost:2181 upconfig -d /media/sf_VM/Dump/new/conf -n myConf6

我上传的配置的名称是myConf6

5 使用此自定义配置创建 Solr 集合

root@dev-base:/opt/solr# bin/solr create -c myNewCollection -n myConf6 -shards 2 -replicationFactor 2 -force

点击Solr 管理 URL

6 使用 POST API 使用 Json 索引数据

网址:http://localhost:8983/solr/myNewCollection/update

方法:邮寄

身体:

[{
    "_id": "99999999999999999999",
    "author": [
        "New Inserted 9000"
    ],
    "authorLastName": [
        "New Inserted 9000"
    ],
    "impn": "New Inserted 9000",
    "isbn10": "9999999999",
    "isbn13": "9999999999999",
    "title": "New Inserted 9000",
    "publisher": "New Inserted 9000",
    "sales_a": 5.0,
    "sales_t": 5.0,
    "haveImage": 1,
    "pages": "76",
    "image": "http://ip.ip.com/is/image/",
    "format": "Paper",
    "mtc_id": "99999999999",
    "subjects" : [         
        "9000"
    ]
    "rating": 0,
    "description_long": "Snahashis call me in your marriage."
}
Run Code Online (Sandbox Code Playgroud)

删除Zookeeper中的配置:

如果您想删除已上传到 ZooKeeper 的旧/错误配置,请运行以下命令:

./server/scripts/cloud-scripts/zkcli.sh -cmd clear -z "<ZK_HOST>:<ZK_PORT>" /configs/AAA

配置的路径是/configs/< name of the configset >

删除特定文件:

zkcli.sh --zkhost <ZK_HOST>:<ZK_PORT> -cmd clear /configs/<MY_COLLECTION>/solrconfig.xml

上传更新的文件:

zkcli.sh --zkhost <ZK_HOST>:<ZK_PORT> -cmd putfile /configs/<MY_COLLECTION>/solrconfig.xml /<MY_UPDATED_FILE_LOCAL_FOLDER>/solrconfig.xml

然后我们需要重新启动solr节点。

通过 API 删除集合:

  1. 首先删除在此集合上创建的别名(如果有)

http://localhost:8983/solr/admin/collections?action=DELETEALIAS&name=aliasName

  1. 删除集合:

http://localhost:8983/solr/admin/collections?action=DELETE&name=collectionName