精简版:

有谁知道solr5的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的“未知”参数,并且该参数有效-意味着没有更多错误。

因此,虽然它以前可以在solr4上工作而无需进行任何其他更改,但是对于solr5,它不再起作用。有什么改变吗?我是否错过任何有关此过滤器的文档?我需要加载任何额外的库才能使其正常工作吗?

最后,如果上面的意思是这样的(错误/功能/其他)-是否有任何变通办法,以便具有这种“side-substring”索引功能,而无需在我向其中添加文档时生成值solr?

更新:使用“被黑客入侵”的模式(即不使用side=front),我为文档建立了索引,并更改了要存储的PP字段。当我搜索时,看起来它索引了整个值。例如,对于NAME:ELEPHANT,我发现PP:ELEPHANT ...

最佳答案

在版本4.4中的has been removed上下文中,该属性side LUCENE-3907。现在,此过滤器的行为始终就像您输入了side="front"一样。因此,您可以只删除该属性就可以了,因为您使用的是“前向”属性。

您可以在链接的Lucene问题的对话中阅读



这就是已经完成的工作。 side属性已从过滤器中删除。

这是在Lucene中完成的,而不是直接在Solr中完成的。由于Lucene是Java-API,因此已被提及in the Java Doc of the filter



这可能就是为什么在Solr文档中找不到有关它的字词的原因。但是in Lucene's Change Log也提到了此更改。

关于plugins - solr5中EdgeNGramFilterFactory的更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28807427/

10-13 05:26