我创建了三个Solr云实例,用于跨三个实例分片数据并从这三个实例中查询。我使用以下命令创建了它们
CMD:
solr.cmd start -c -s Node1 -p 8983
solr.cmd start -c -s Node2 -z localhost:9983 -p 8984
solr.cmd start -c -s Node3 -z localhost:9983 -p 8985
然后我创建了一个使用三个分片并且复制因子为1的集合。
CMD1:
solr.cmd create_collection -c tests -shards 3 replicationFactor 1
然后我使用post jar使用以下命令将数据索引到集合中。
CMD2:
java -jar post.jar *.xml
该位置有32个XML文件
根据我的理解,数据将在三个Solr云实例上的所有数据上进行拆分和索引。
但是发生的事情是32个文档被编入所有三个实例的索引。
我通过使用以下网址确认了这一点
http://localhost:8984/solr/tests/select?indent=on&q=*:*&wt=json
http://localhost:8985/solr/tests/select?indent=on&q=*:*&wt=json
http://localhost:8983/solr/tests/select?indent=on&q=*:*&wt=json
所有内容都返回了相同数量的记录。
我的理解是文档将在所有三个实例上进行拆分和索引。
由于我想将30亿个文档编入索尔,并且2 billion hard limit in Solr。我想确保它们在三个Solr实例中被拆分并编入索引。
让我知道是否犯过任何错误。
版本。
Solr =6.1.0
Windows= 7
答案 0 :(得分:1)
当您查询/solr/tests
时,您正在查询tests
集合。在幕后,Solr从该集合中获取所有文档,并从添加到集合中的所有分片中为您返回。
你偶然发现Solr中的一个集合背后的想法 - 无论你查询哪个服务器,Solr都会将集合的结果返回给你,包括添加到该集合的所有文档。您正在进行的三个请求中唯一的区别是,哪个服务器负责将结果返回给客户端,并请求从其他核心获取结果。
如果要浏览单个核心的内容,这些核心名为collectionname_shardX_replicaY
。如果从Zookeeper实例下载json文件,则可以检查当前的集群状态 - 这将准确显示哪些分片位于哪里。
您还可以在单个节点上使用CoreAdmin API来检查已在该服务器上放置的核心。请注意,当您在云模式下运行时,不希望通过CoreAdmin API执行任何可变操作。