【问题标题】:provide alternative name to the original name in solr while searching搜索时在 solr 中提供原始名称的替代名称
【发布时间】:2014-05-21 12:08:28
【问题描述】:

我有 100 个这样的文档

<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/select?q=router”),如果“产品”字段中存在“路由器”一词,我会得到结果。但我想查询以其他方式...如果我搜索 RT("//XYZ:8983/solr/collection1/select?q=RT"),我应该得到相同的结果。

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

【问题讨论】:

    标签: xml solr indexing


    【解决方案1】:

    我会猜测(如果我错了,请告诉我),您的 product 字段被索引为 type="text" 字段。如果是这种情况,那么您有一个很好的解决方案。您对文本 fieldType(在 schema.xml 中配置)的分析应包括索引和查询时分析的这一行:

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

    这使您可以建立一组已知同义词,这些同义词应在索引的conf 文件夹中的synonyms.txt 文件中进行标识。例如,synonyms.txt 文件中的一行可能是:

    router => rt
    

    当您提供值“Router CTP133”作为产品名称时,它实际上会被索引为“rt ctp 133”。 (注意,我假设您配置了其他常见的文本字段过滤。)当有人搜索“rt”时,它将匹配这个修改后的产品名称。如果有人搜索“路由器”,SynonymFilterFactory 将再次介入并修改搜索。 实际应用的搜索不是“路由器”,而是“rt”。所以无论如何它都会匹配。

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

    【讨论】:

    • 谢谢,我明白了,但这个答案需要小修正。而不是“路由器=> rt”,写“rt =>路由器”。
    • 如果在查询和索引时间都应用,两个订单应该具有相同的效果。使用rt =&gt; router,您可以只在查询时应用过滤器,只要缩写“rt”不出现在任何实际产品记录中。
    • 我按照你说的方式再试了一次。但它不起作用。可能我在某个地方出错了。无论如何,我满足我的要求。
    • @frances:你能看看这个。我还有一个stackoverflow.com/questions/23822503/…
    猜你喜欢
    • 1970-01-01
    • 2011-07-27
    • 2022-11-15
    • 2020-01-05
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多