【问题标题】:solr synonyms not being parsed未解析 solr 同义词
【发布时间】:2011-09-29 09:52:05
【问题描述】:

我正在使用 solr 中的过去搜索来制作自动建议功能。 Synonyms.txt 包含常见拼写错误/拼写错误等的列表。它设置为在索引上运行并使用管理员中的分析工具我可以看到它工作正常 - 但它似乎不适用于实时数据。

Field type :
<field name="suggest_ngrams" type="text_ngram" indexed="true" stored="false" multiValued="true" />

Schema:
<fieldType name="text_ngram" class="solr.TextField" positionIncrementGap="100">
 <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
     <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" enablePositionIncrement="true"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
 </analyzer>
 <analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>   
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" enablePositionIncrement="true"/>
 </analyzer>

and an example of synonyms.txt
watch, watches, watche, watchs => watch

因此,在索引时,我希望“watche”被替换为“watch” - 情况似乎并非如此(尽管分析工具说它正在这样做。

要清楚,如果我查询 solr (?q=watc),结果中会出现短语“watche”

任何想法或见解将不胜感激,因为我认为一切设置正确

谢谢

【问题讨论】:

    标签: solr synonym


    【解决方案1】:

    如果我的问题是正确的:-
    同义词仅在索引期间使用,不会影响存储的值。
    所以您在分析中看到的是索引时间值,它似乎工作正常。
    当您查询 solr 并匹配此结果时,结果将仅返回“watche”,因为这是存储的原始值。
    存储的值永远不会被修改,而是按原样存储并在响应中返回。

    如果我弄错了,请澄清。

    【讨论】:

    • 这就是我不确定的 - 据我了解,同义词过滤器在执行索引时应将 'watche' 替换为 'watch'。所以 'watche' 根本不应该在索引中,也不应该在结果中返回。
    • #显式映射匹配“=>”的 LHS 上的任何标记序列#并替换为 RHS 上的所有替代项。这些类型的映射#忽略架构中的扩展参数。 #Examples: i-pod, i pod => ipod, sea biscuit, sea biscit => seabiscuit
    • 所以对我来说,该术语已被替换,因此不应出现在索引中......
    • 同义词仅存储为索引数据,不会替换存储的数据,存储数据以不同方式维护并随响应返回。因此,如果您将 watche 提供给 solr,watch 是在搜索中使用的索引数据,而 watche 是与结果一起返回的存储数据。
    • 刚刚将同义词文件添加到查询中,仍然得到“watche”的结果。我该如何过滤掉它?
    【解决方案2】:

    正如@Jayendra 所述,solr 不会更改存储的值。因此,您应该找到另一种处理此障碍的方法。 就我而言,我想出了一个使用 facet 的解决方案。如果您在该字段上分面,您会收到索引值(映射)。

    另一种解决方案是,您可以在将数据加载到 Solr 之前,在单独的进程中将过滤器应用于数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2023-03-27
      • 2022-11-25
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多