Solr 踩过的坑

1.solrj查询出的SolrDocument转成SolrInputDocument后不能删除字段,无奈只能new一个SolrInputDocument,然后将原来的key-value拷贝到新new的对象上。
2.cloud模式下solrj不能下载zk的配置文件,ZkController.downloadConfigDir总是报No Node for xxx 这样的错。在tomcat启动的时候指定要上传到zk的本地文件夹位置。
3.cloud模式下solrj不能上传配置文件,ZkController.uploadConfigDir不报错,就是不能上传成功,未找到原因和解决办法。
4.*_t字段加一个不分词的copy字段。

<dynamicField name="*_t"  type="text_general"    indexed="true"  stored="true" multiValued="true"/>

<dynamicField name="*_t_facet"  type="notanalyze"    indexed="true"  stored="true" multiValued="true"/>

<copyField source="*_t" dest="*_t_facet"/>

<fieldType name="notanalyze" class="solr.StrField" sortMissingLast="true" />

5.加了*_t_facet字段后,以后修改solr文档时*_t_facet以前的值会不断增加(旧值还在),就算把*_t的字段删除,*_t_facet的字段也会继续存在。没办法,每次更新文档的时候只能一把更新整个文档,更新整个文档的时候还得把*_t_facet和_version_字段删除。SolrInputDocument不给删除字段怎么办?看上面第1个坑。
6.一开始没注意,后来才发现如果某个字段是分词的字段,那么facet这个字段的结果就是分词后的结果。一般情况下,要facet的字段需要配置成不分词的。这个容易,给源字段加一个copy字段好了。那动态字段怎么加不分词的copy字段呢?看上面第4个坑。
举个栗子:
假如有两个文档,name_t和email_t是分词的。email_t_facet是不分词的。注意email_t_facet是自动生成的。
Solr 踩过的坑_第1张图片

Solr 踩过的坑_第2张图片

email_t也是分词的。facet是分词后的结果,太散了
Solr 踩过的坑_第3张图片

email_t_facet是不分词的。facet的结果是我们想要的
Solr 踩过的坑_第4张图片

7.schema.xml中文档的id不能配置成分词的,否则会出现文档重复的问题。


<field name="id" type="notanalyze" indexed="true" stored="true" required="true" multiValued="false" /> 

你可能感兴趣的:(BigData)