您如何在 SolrCloud 中配置/导出 requestHandler 以使用所有分片
How do you confiugre /export requestHandler in SolrCloud to use all shards
我正在使用 solr 4.10.2。我有一个 /export 处理程序可以导出大型数据集。当我将配置部署到我的 solr 集群环境中时,我注意到导出功能缺少一些记录。
如果我 运行 通过 /select 和 /export 使用相同的查询字符串,我将在 /export 调用中获得较少的记录。
要使 /export 在 SolrCloud 环境中工作,您需要做什么特别的事情吗?
<requestHandler name="/export" class="solr.SearchHandler">
<lst name="invariants">
<str name="rq">{!xport}</str>
<str name="wt">xsort</str>
<str name="distrib">false</str>
</lst>
<arr name="components">
<str>query</str>
</arr>
</requestHandler>
我尝试将 "distrib" 属性更改为 true 希望这会有所帮助,但这导致了其他错误。
有什么建议吗?
/export
端点仅与本地节点相关,但Streaming Expressions API(在/stream
下可用,无需任何进一步配置)建立在[=12=之上] 端点,旨在成为云的替代方案。
这还允许您在请求内容时处理内容(如果适用)。
/stream
所需的参数与 /export 相同。
但是由于您使用的是 4.10.2,因此您将不得不从 Zookeeper 请求 clusterstate.json,然后在本地合并结果之前自行查询每个节点。
您可以通过连接到 Zookeeper 来检索此文件:
zkCli.sh -server ip:2181
然后检索集群状态:
get /clusterstate.json
您将找到每个集合的分片列表及其副本,然后您可以迭代这些值并从每个服务器上的 /export
处理程序检索结果。
这里有一些代码可以得到上面描述的内容:
final CloudSolrServer server = new CloudSolrServer(zooKeeperEndpoint);
server.connect();
final ClusterState clusterState = server.getZkStateReader().getClusterState();
// and get the leader of the collection...
Replica leader1 = clusterState.getLeader("search_index", "shard1");
Replica leader2 = clusterState.getLeader("search_index", "shard2");
Replica leader3 = clusterState.getLeader("search_index", "shard3");
List<String> listOfNodes = new ArrayList<String>();
listOfNodes.add((String) leader1.get("core"));
listOfNodes.add((String) leader2.get("core"));
listOfNodes.add((String) leader3.get("core"));
然后遍历列表调用 solr 索引的每个核心:
String solrURL = "http://mysolrserver/solr" + "/" + nodeEndpoint + "/export?q=*:*" + "&fq=text:\"*SEARCHSTRING*\"&fl=field1,field2&sort=sortFieldId asc";
我正在使用 solr 4.10.2。我有一个 /export 处理程序可以导出大型数据集。当我将配置部署到我的 solr 集群环境中时,我注意到导出功能缺少一些记录。
如果我 运行 通过 /select 和 /export 使用相同的查询字符串,我将在 /export 调用中获得较少的记录。
要使 /export 在 SolrCloud 环境中工作,您需要做什么特别的事情吗?
<requestHandler name="/export" class="solr.SearchHandler">
<lst name="invariants">
<str name="rq">{!xport}</str>
<str name="wt">xsort</str>
<str name="distrib">false</str>
</lst>
<arr name="components">
<str>query</str>
</arr>
</requestHandler>
我尝试将 "distrib" 属性更改为 true 希望这会有所帮助,但这导致了其他错误。
有什么建议吗?
/export
端点仅与本地节点相关,但Streaming Expressions API(在/stream
下可用,无需任何进一步配置)建立在[=12=之上] 端点,旨在成为云的替代方案。
这还允许您在请求内容时处理内容(如果适用)。
/stream
所需的参数与 /export 相同。
但是由于您使用的是 4.10.2,因此您将不得不从 Zookeeper 请求 clusterstate.json,然后在本地合并结果之前自行查询每个节点。
您可以通过连接到 Zookeeper 来检索此文件:
zkCli.sh -server ip:2181
然后检索集群状态:
get /clusterstate.json
您将找到每个集合的分片列表及其副本,然后您可以迭代这些值并从每个服务器上的 /export
处理程序检索结果。
这里有一些代码可以得到上面描述的内容:
final CloudSolrServer server = new CloudSolrServer(zooKeeperEndpoint);
server.connect();
final ClusterState clusterState = server.getZkStateReader().getClusterState();
// and get the leader of the collection...
Replica leader1 = clusterState.getLeader("search_index", "shard1");
Replica leader2 = clusterState.getLeader("search_index", "shard2");
Replica leader3 = clusterState.getLeader("search_index", "shard3");
List<String> listOfNodes = new ArrayList<String>();
listOfNodes.add((String) leader1.get("core"));
listOfNodes.add((String) leader2.get("core"));
listOfNodes.add((String) leader3.get("core"));
然后遍历列表调用 solr 索引的每个核心:
String solrURL = "http://mysolrserver/solr" + "/" + nodeEndpoint + "/export?q=*:*" + "&fq=text:\"*SEARCHSTRING*\"&fl=field1,field2&sort=sortFieldId asc";