首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pysolr连接到solr云集

使用pysolr连接到solr云集
EN

Stack Overflow用户
提问于 2017-11-13 11:53:05
回答 3查看 2K关注 0票数 3

我已经配置了一个多核solr云。创建了一个具有两个碎片且没有复制的集合。

通过solr 192.168.1.56:8983,我能够获得查询的结果。

我也想对pysolr做同样的操作,所以尝试运行以下命令:

代码语言:javascript
复制
import pysolr
zookeeper = pysolr.ZooKeeper("192.168.1.56:2181,192.168.1.55:2182")
solr = pysolr.SolrCloud(zookeeper, "random_collection")

即使在那里,最后一行也找不到集合。下面是一个错误跟踪:

代码语言:javascript
复制
---------------------------------------------------------------------------
SolrError                                 Traceback (most recent call last)
<ipython-input-43-9f03eca3b645> in <module>()
----> 1 solr = pysolr.SolrCloud(zookeeper, "patent_colllection")

/usr/local/lib/python2.7/dist-packages/pysolr.pyc in __init__(self, zookeeper, collection, decoder, timeout, retry_timeout, *args, **kwargs)
   1176 
   1177     def __init__(self, zookeeper, collection, decoder=None, timeout=60, retry_timeout=0.2, *args, **kwargs):
-> 1178         url = zookeeper.getRandomURL(collection)
   1179 
   1180         super(SolrCloud, self).__init__(url, decoder=decoder, timeout=timeout, *args, **kwargs)

/usr/local/lib/python2.7/dist-packages/pysolr.pyc in getRandomURL(self, collname, only_leader)
   1315 
   1316     def getRandomURL(self, collname, only_leader=False):
-> 1317         hosts = self.getHosts(collname, only_leader=only_leader)
   1318         if not hosts:
   1319             raise SolrError('ZooKeeper returned no active shards!')

/usr/local/lib/python2.7/dist-packages/pysolr.pyc in getHosts(self, collname, only_leader, seen_aliases)
   1281         hosts = []
   1282         if collname not in self.collections:
-> 1283             raise SolrError("Unknown collection: %s", collname)
   1284         collection = self.collections[collname]
   1285         shards = collection[ZooKeeper.SHARDS]

SolrError: (u'Unknown collection: %s', 'random_collection')

Solr版本为6.6.2,动物园管理员版本为3.4.10

如何创建到solr云集合的连接?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-14 05:57:34

Pysolr目前不支持外部动物园管理员集群。Pysolr检查clusterstate.json中的集合,Solr为每个集群临时编写成state.json,clusterstate.json保持为空。

要解决单个集合的问题,可以在ZooKeeper.CLUSTER_STATE中硬编码pysolr.py变量,如下所示:

代码语言:javascript
复制
ZooKeeper.CLUSTER_STATE = '/collections/random_collection/state.json'

pysolr.py可以在/usr/local/lib/python2.7/dist-packages上找到,并且可以尝试用

代码语言:javascript
复制
pip install -e /usr/local/lib/python2.7/dist-packages/pysolr.py
票数 3
EN

Stack Overflow用户

发布于 2020-10-18 21:08:04

即使对于SolrCloud,常规HTTP客户端也能很好地工作。

这在Solr7.5和PySolr 3.9.0中进行了测试:

代码语言:javascript
复制
import pysolr

solr_url="https://my.solr.url"
collection = "my_collection"
solr_connection = pysolr.Solr("{}/solr/{}".format(solr_url, collection), timeout=10)
results = solr_connection.search(...)

print(results.docs)
票数 1
EN

Stack Overflow用户

发布于 2020-01-21 22:09:10

更好的方法是以一种通用的方式提供这些集合:

代码语言:javascript
复制
import pysolr
import json

zookeeper = pysolr.ZooKeeper("ZK_STRING")
collections = {}
for c in zookeeper.zk.get_children("collections"):
    collections.update(json.loads(zookeeper.zk.get("collections/{}/state.json".format(c))[0].decode("ascii")))
zookeeper.collections = collections
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47263729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档