1

我已将 Solr 与 My eComemrce Web 应用程序集成。我正在将产品标题和产品的许多其他领域索引到 Solr。现在我已将BLÅBÆRSOMMEREN索引到产品标题/名称中。我还为 Title 字段添加了 EdgeNGram。由于 EdgeNgram,如果我搜索任何令牌,我都会得到结果。并且由于拼写检查,如果我搜索错误的拼写,例如:BLÅBÆRISOMMEREN,我得到了结果。但是,如果我搜索BLÅBÆRI,我没有得到任何结果,因为没有任何相同的标记。

我想要结果中具有BLÅBÆR的产品,因为该令牌存在。对于任何其他错误的拼写搜索也是如此。

我怎样才能做到这一点?任何帮助将不胜感激!

谢谢。

4

2 回答 2

2

听起来您可能为索引和查询配置了不同的 Solr 标记化。

因此,在您的示例中,索引中可能会出现以下术语:

  • 提单
  • 布拉
  • 废话
  • 布拉布
  • 布拉布尔
  • BLÅBÆRS

但是,由于您的查询词没有被处理成 ngram,您只是在搜索

  • BLÅBÆRI

它不会出现在您的索引词中。

这是使用 ngram 时的常见做法,但听起来在您的用例中您希望在结果中返回部分匹配项。

检查您的 Solr 模式以确保您为查询时间配置了匹配的 EdgeNGram 过滤器,就像为索引时间配置的一样,例如

<fieldType name="text_general_edge_ngram" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
      <tokenizer class="solr.LowerCaseTokenizerFactory"/>
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
   </analyzer>
   <analyzer type="query">
      <tokenizer class="solr.LowerCaseTokenizerFactory"/>
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
   </analyzer>
</fieldType>

不过请确保您正在排序score,因为这种策略很可能会给您带来很多误报!

于 2016-01-30T11:54:33.797 回答
1

对于拼写错误的单词,您可以使用模糊查询(允许与查询词的编辑距离为 ~1 或 ~2 的索引词匹配)。

使用您的示例,BLÅBÆRISOMMEREN与您的索引词的编辑距离为 1(一个字符差异)。

因此,查询q=title:BLÅBÆRISOMMEREN~1将匹配您的标题词,但BLÅBÆRI不会(没有上一个答案中的 ngram 方法。)。

如果您正在尝试构建自动建议,您还可以研究 Solr 的Suggester 组件,因为它还可以处理模糊建议,例如:(BLÅBÆRI -> BLÅBÆRSOMMEREN),并且通常比传统查询响应更快。

于 2016-01-30T20:09:47.977 回答