今天在测试一个solr的排序问题的时候,突然建立不了索引了,我用的分布式的solrCloud(4.7.2版本),报一个异常—— org.apache.solr.client.solrj.impl.CloudSolrServer$RouteException: ERROR: [doc=0] cannot set an index-time boost, unindexed or norms are omitted for field cat: cat,大意是对于不建立索引或者标准因子忽略的域不能使用boost,然后我看了一下我的scheme.xml中cat域的配置
确实没有写omitNorm的属性, 从这里可以总结出,如果不写的话默认就是true,即忽略标准因子。此时如果再在这个域中设置boost,就会抛那个异常
for(int i=0;i<10;i++){ SolrInputDocument d = new SolrInputDocument(); // d.setDocumentBoost(i); d.addField("id", i); d.addField("cat", "cat",i);//用i作为标准因子,结果报错了,问题就出在这里, list.add(d); }
所以如果一个域要使用标准银子的话必须要手动的设置omitNorm= false才可以,不然就会报错。
此处很容易要联想到另一个地方,即可以在document层面设置boost,如果这样做的话,对于设置和没有设置omitNorm的域会有什么结果呢?我自己做了一下实验,结论如下:
1、如果这个域设置了omitNorm=true,即忽略标准银子,则在使用这个域进行查询的时候标准银子不会有作用,但是不会抛异常。
2、如果设置了omitNorm=false,即不忽略标准银子,则在使用这个域进行查询的时候标准银子会起作用。