从命令行检查Solr Core是否已存在

时间:2016-11-15 07:59:01

标签: powershell solr

基本上我正在编写一个Powershell脚本,如果不存在,将创建一个新的核心,更新schema.xml,重新启动核心并运行数据导入实用程序。

一种解决方案是做

solr create -c products

如果它已经存在,那么它会抛出一个错误,但它不是一个优雅的解决方案

3 个答案:

答案 0 :(得分:5)

最简单的解决方案是检查核心状态

http://localhost:8983/solr/admin/cores?action=STATUS&core=core0

core0 - 核心名称

如果核心不存在,你将获得

input type=button

如果核心存在,您将获得更多信息(仅作为示例)

 <response>
    <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">0</int></lst>
    <lst name="initFailures"/>
    <lst name="status"><lst name="core0"/></lst>
  </response>

答案 1 :(得分:1)

接受的答案已经过时,并不真正适合脚本检查。

检查我迄今为止发现的内核是否存在的唯一可靠方法是尝试在其中搜索或重新加载它:

curl --fail "http://localhost:8983/solr/admin/cores?action=reload&core=${SOLR_CORE}"
# or
curl --fail "http://localhost:8983/solr/${SOLR_CORE}/select?q=*:*"

答案 2 :(得分:0)

那些来自未来的人正在寻找 8.8 中的等价物,因为似乎上述端点不再有效(不知道为什么......也许是我传递给 curl 的 url 的 url 编码问题,但我不知道)。您也可以使用 v2 API。

curl -sI localhost:8983/api/cores/<core_name> | grep "HTTP/1.1 200 OK" 如果存在,会给你 0 退出代码,如果不存在,会给你 1 退出代码。与解析 JSON 相比,使用 HTTP 响应代码更简单。

所以一个班轮可能看起来像

[[ ! $(curl -sI $SOLR_API/cores/new_core | grep "200 OK") ]] && sudo su solr -c 'solr create -c new_core'