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"/>
<!--声明*_t_facet字段的类型为notanalyze(不分词)-->
<dynamicField name="*_t_facet" type="notanalyze" indexed="true" stored="true" multiValued="true"/>
<!--将*_t字段拷贝到*_t_facet字段上,注意拷贝动作是在*_t字段分词前拷贝的,而且是solr自动完成的,所以*_t_facet是不分词的,而且我们也不应该手动维护*_t_facet字段-->
<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是自动生成的。
email_t也是分词的。facet是分词后的结果,太散了
email_t_facet是不分词的。facet的结果是我们想要的
7.schema.xml中文档的id不能配置成分词的,否则会出现文档重复的问题。
<!--id字段默认的type是string,但是我们经常把string和text都配置成了smartcn或者ik什么的,分词器配置在string上时别忘了把id的类型改掉-->
<field name="id" type="notanalyze" indexed="true" stored="true" required="true" multiValued="false" />