dcg*_*dcg 9 configuration plugins solr load
精简版:
有谁知道Soln5的EdgeNGramFilterFactory是否发生了什么事?它曾经在solr 4上正常工作,但我刚刚升级到solr5并且使用此过滤器的具有此字段的内核拒绝加载...
很长的故事:
此配置曾用于solr4.10(schema.xml):
<field name="NAME" type="string" indexed="true" stored="true" required="true" multiValued="false"/>
<field name="PP" type="text_prefix" indexed="true" stored="false" required="false" multiValued="false"/>
<copyField source="NAME" dest="PP">
<fieldType name="text_prefix" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
</analyzer>
</fieldType>
Run Code Online (Sandbox Code Playgroud)
和文档说我这样做是正确的(如果没有明确提到它是solr4或solr5).
但是,当我尝试使用此配置添加集合时,它失败并显示以下消息:
<lst name="failure">
<str>
org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException:Error from server at http://localhost:8983/solr: Error CREATEing SolrCore 'test_collection': Unable to create core [test_collection] Caused by: Unknown parameters: {side=front}</str>
</lst>
Run Code Online (Sandbox Code Playgroud)
我删除了side=front"未知"参数,从头开始,它工作 - 意味着没有更多的错误.
因此,虽然它曾经用于solr4而没有任何额外的改变,但对于solr5它不再有效.有什么改变了?我是否错过了有关此过滤器的任何文档?我需要加载任何额外的库来使其工作?
最后,如果上面的意思是这样的(bug/feature/what) - 是否有任何解决方法,以便拥有这个"side-substring"索引功能,而不必在我添加文档时生成值Solr的?
更新:使用"黑客"架构(即没有side=front),我索引文档并更改PP要存储的字段.当我搜索时,它看起来像索引整个值.例如,因为NAME:ELEPHANT,我发现PP:ELEPHANT......
che*_*ffe 13
该属性side 已在版本4.4 中的LUCENE-3907中删除.现在,此过滤器的行为就像您放弃了一样side="front".因此,您可以删除该属性并且没问题,因为您正在使用"前端".
正如您可以阅读链接的Lucene问题的对话
如果你需要反向n-gram,你可以随后添加一个过滤器来做到这一点.在此过滤器中无需将此作为单独的逻辑.我们应该分割逻辑并尽可能简化过滤器.
这就是已经完成的事情.side属性已从过滤器中删除.
这已经在Lucene完成,而不是直接在Solr中完成.由于Lucene是一个Java-API,因此在过滤器的Java Doc中已经提到过它
从Lucene 4.4开始,此过滤器不支持EdgeNGramTokenFilter.Side.BACK(您可以使用ReverseStringFilter预先和之后获得相同的行为),正确处理补充字符并且不再更新偏移量.
这可能是您在Solr文档中找不到相关内容的原因.但Lucene的变更日志中也提到了这种变化.