2014-05-21 60 views
0

我有100个文件这样Solr中原来的名称提供替代名称,而搜索

<doc> 
<field name="id">9</field> 
<field name="riskId">4</field> 
<field name="riskType">legal</field> 
<field name="riskValue">3</field> 
<field name="product">Router CTP133</field> 
<field name="facility">plant</field> 
<field name="location">Busan, korea</field> 
</doc> 

目前,如果我搜索路由器(“// XYZ:8983/Solr的/ collection1 /选择Q =路由器“),我得到的结果,如果单词”路由器存在于“产品”字段。但我想以其他方式查询,如...如果我搜索RT(“//XYZ:8983/solr/collection1/select q = RT“),我应该得到同样的结果。

请帮助我。我有这个要求办??

回答

0

我要去猜(并且令m e知道我是否错了),您的product字段被索引为type="text"字段。如果是这样的话,你可以得到方便的解决方案。您的文本字段类型(在schema.xml配置)分析应包括该线路用于索引和查询时间分析:

<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/> 

这样就可以建立一套应synonyms.txt文件内被识别出的已知的同义词您的索引conf文件夹。例如,在你的synonyms.txt文件中的一行可能如下:

router => rt 

当你提供的价值“路由器CTP133”作为产品名称,它实际上将被索引为“RT CTP 133”。 (请注意,我假定您配置了其他常见文本字段过滤。)当某人搜索“rt”时,它将匹配此修改后的产品名称。如果有人搜索“路由器”,则SynonymFilterFactory将再次进入并修改搜索。而不是“路由器”,实际应用的搜索将是“rt”。所以它会匹配不管。

如果您对synonyms.txt文件和schema.xml进行了必要的更改(如果同义词过滤功能尚未激活),您应该能够对文档进行重新索引以获得所需的行为。

+0

Thnanks,我明白了,但这个答案是需要小修正的。代替“router => rt”,写入“rt => router”。 – user3322698

+0

如果在查询和索引时间应用这两个订单,它们应该具有相同的效果。使用'rt => router',只有在查询时才能应用过滤器,只要缩写“rt”没有出现在任何实际的产品记录中。 – frances

+1

我以你说的方式再次尝试。但它不工作。可能我在某个地方出了问题。无论如何,我满足了我的要求。 – user3322698