1.启动云模式的solr:
solr start -e cloud -z dmp01:2181,dmp02:2181,dmp03:2181,dmp04:2181,dmp05:2181
根据提示创建solr node。lz使用四台服务器创建solr集群,每台上起一个node,端口为8983。
2.创建collection(相当于单机版的core):
collection不能用web管理页面来创建,要使用web api来创建。根据solr wiki,在浏览器上写下url:
http://192.168.3.176:8983/solr/admin/collections?action=CREATE&name=testColl&collection.configName=testConf&numShards=2&replicationFactor=2
collection.configName:配置文件组名称。
配置文件组要自己手动上传到zk上,上传的脚本solr已经提供了,是~/solr-5.5.0/server/scripts/cloud-scripts/zkcli.sh。
./zkcli.sh -cmd upconfig -confdir /home/zhengyi/testConf -confname testConf -z dmp01:2181,dmp02:2181,dmp03:2181,dmp04:2181,dmp05:2181
lz创建testConf目录来放配置文件(该目录放哪无所谓),然后将~/solr-5.5.0/server/solr/configsets/basic_configs/conf下的配置文件copy到testConf目录下,还要将~/solr-5.5.0/example/example-DIH/solr/solr/conf下的3个html(貌似是管理页面上的html)文件拷贝到该目录下。给这组配置起个名字叫testConf,也就是collection.configName的值。
配置文件中solrconfig.xml是最基本的配置文件,上面的一些配置要进行修改,比如索引的存放目录:
<dataDir>/data/solr</dataDir>
numShards:一个索引要分解成几个碎片,存放在几台机器上。
replicationFactor:每个碎片的副本数量。
因为lz是4台主机,所以这样设置,让索引分解成2个碎片分别存在2台主机上,另外两台主机为这两个碎片做备份。
创建好之后,我们看下本地和zk上生成的文件:
本地:~/solr-5.5.0/example/cloud/下会有node1目录(如果一台机器上用不同的端口建两个节点,还会有node2,以此类推),数据目录/data/solr。
zk:/collections下是testColl节点,/configs下是上传的testConf配置文件,/live_nodes是启动的solr服务器节点。
3.添加field:
见上一篇文章。
4.solrj建立索引:
lz一直在找为HBase建立索引的方法,网上也有一些工具提供该功能,比如cloudera的Lily。但是可能是因为版本的原因,一直未实现。所以只能用最笨的办法solrj来做了:
public class Solrj { private static final String SOLR_URL = "http://192.168.3.176:8983/solr"; public static void main(String[] args) throws SolrServerException, IOException { SolrClient client = new HttpSolrClient(SOLR_URL); // add System.out.println("====================solrj add begin"); List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); SolrInputDocument doc1 = new SolrInputDocument(); doc1.addField("id", 181); doc1.addField("brandId", "1001"); doc1.addField("brandName", "噼里啪啦1号"); docs.add(doc1); SolrInputDocument doc2 = new SolrInputDocument(); doc2.addField("id", 182); doc2.addField("brandId", "1002"); doc2.addField("brandName", "噼里啪啦2号"); docs.add(doc2); SolrInputDocument doc3 = new SolrInputDocument(); doc3.addField("id", 183); doc3.addField("brandId", "1003"); doc3.addField("brandName", "噼里啪啦3号"); docs.add(doc3); client.add("testColl_shard1_replica1", docs); client.commit("testColl_shard1_replica1"); System.out.println("====================solrj add end"); // query System.out.println("====================solrj query begin"); ModifiableSolrParams params = new ModifiableSolrParams(); params.add("q", "*:*"); params.add("rows", "100"); QueryResponse resp = client.query("testColl_shard1_replica1", params); for (SolrDocument doc : resp.getResults()) { System.out.println(doc.getFieldValue("brandName")); } System.out.println("====================solrj query end"); client.close(); } }
楼下是疯子。哈哈
楼下是疯子。哈哈