【问题标题】:Solr 4.7 using 'solr.EdgeNGramFilterFactory' highlighting issueSolr 4.7 使用“solr.EdgeNGramFilterFactory”突出显示问题
【发布时间】:2018-03-28 02:44:37
【问题描述】:

有人可以帮助我突出显示我在搜索“汽车”时遇到的问题,它突出显示“汽车”、“汽车”的预期行为以及所有以汽车开头的单词,例如“卡片”、运营商等

用户的要求是我们不想突出任何以“汽车”开头的东西??这是我的 schema.xml

<analyzer type="index">
       <charFilter class="solr.PatternReplaceCharFilterFactory" 
                pattern="[({.,\[\]})]" replacement=" "/>
   <tokenizer class="solr.WhitespaceTokenizerFactory"/>
   <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
   <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt"/>
   <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" preserveOriginal="1"  catenateAll="1"  />
   <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
   <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15"/>
   <filter class="solr.SnowballPorterFilterFactory" language="English" />

【问题讨论】:

    标签: solr


    【解决方案1】:

    问题在于,当您使用 edgengramfilter 索引 cards 时,您会得到标记 ccacarcardcards。然后,当您搜索 cars您有相同的 edgengramfilter 字段时,youll search for any document matching any of the tokensc,ca,car, andcars`。

    解决方案是在索引时删除 edgengramfilter(这样您就不会遇到 ccacar 的命中),或者使用不同的字段进行突出显示(使用 hl.fl)仅应用了标准标记化/空白标记化,以及可能的词干分析器(我会选择 solr.EnglishMinimalStemFilterFactory 以仅删除复数指示符)。

    【讨论】:

    • 感谢您的回复,如果我删除了 edgengramfilter 它会起作用,但它会停止搜索所有相关结果,用户希望在搜索汽车时查看所有相关结果 - 首先所有出现的汽车、汽车和所有其他以汽车开头的我们如何才能做到这一点?
    • 如前所述 - 您可以使用不同的字段来突出显示而不是搜索。使用一个不带 edgengram 的突出显示(并在hl.fl 中给出),一个用于搜索 edgengram。您可以使用copyField 将相同的内容索引到两个字段中。
    • 我也试过这两种解决方案都有效 谢谢,当我使用不同的字段时,还有一个问题我得到了所有想要的结果,但结果不是用户想要的,例如 - 搜索“汽车”带来汽车、手推车、卡片、汽车有没有办法首先显示最相关的东西,比如汽车、汽车、卡片……等等??
    • 使用第三个字段(或者在这种情况下,可能只是您用于突出显示的字段)具有更受约束的形式(即更精确的命中,没有边缘图),然后对该字段应用提升.使用edismax,您可以使用qf=field1^10 field2^5 field3 执行此操作,以使field1 的权重是field3 的10 倍,等等(最后一个提升的field3 应该是产生最不相关点击的那个)。跨度>
    • Matt - 这真的很有帮助,非常感谢您的回复,今天就试试这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2011-11-02
    • 2019-08-12
    • 2012-10-30
    • 2013-08-30
    • 1970-01-01
    相关资源
    最近更新 更多