solr中schema.xml中域的omitNorm属性

今天在测试一个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域的配置

<field name="cat" type="string" indexed="true" stored="true" multiValued="true"/>

确实没有写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,即不忽略标准银子,则在使用这个域进行查询的时候标准银子会起作用。

猜你喜欢

转载自suichangkele.iteye.com/blog/2370851