Solr5中的EdgeNGramFilterFactory更改

时间:2015-03-02 10:24:36

标签: plugins solr configuration 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>

并且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 ...

1 个答案:

答案 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