简短版本:
有没有人知道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>
并且documentation说我做得对(没有明确提及是否适用于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>
我删除了side=front
&#34;未知&#34;参数,从头开始,它工作 - 意味着没有更多的错误。
所以,虽然它曾经为solr4工作而没有任何额外的改变,但对于solr5它不再有效。有什么改变了?我是否错过了有关此过滤器的任何文档?我需要加载任何额外的库来使其工作?
最后,如果上面的意思是这样的(bug / feature / what) - 是否有任何解决方法来使这个&#34; side-substring&#34;索引功能,而不必在向docr添加文档时生成值?
更新:使用&#34;黑客攻击&#34;架构(即没有side=front
),我索引文档并更改了要存储的PP
字段。当我搜索时,它看起来像索引整个值。例如,对于NAME:ELEPHANT
,我找到了PP:ELEPHANT
...
答案 0 :(得分:11)
版本4.4中has been removed上下文中的side
LUCENE-3907属性。现在,此过滤器的行为与side="front"
中的内容完全相同。因此,您可以删除该属性并且没问题,因为您正在使用&#34;前线&#34;。
正如您可以阅读链接Lucene问题的对话
如果你需要反向n-gram,你总是可以添加一个过滤器来做到这一点 然后。没有必要将此作为单独的逻辑 过滤。我们应该分割逻辑并保持过滤器尽可能简单。
这就是已经完成的事情。 side属性已从过滤器中删除。
这已经在Lucene完成,而不是直接在Solr中完成。由于Lucene是一个Java-API,因此提到了in the Java Doc of the filter
从Lucene 4.4开始,此过滤器不支持 EdgeNGramTokenFilter.Side.BACK(您可以使用ReverseStringFilter 在前面和后面获得相同的行为),句柄 补充字符正确,不更新偏移量 了。
这可能是您在Solr文档中找不到相关内容的原因。但是这个变化也被提到in Lucene's Change Log。