【问题标题】:Solr Ngram Match WoeSolr Ngram Match Woe
【发布时间】:2012-02-12 01:11:55
【问题描述】:

这是我的(非常标准的)ngram 模式 --

<fieldType name="ngram" class="solr.TextField" positionIncrementGap="100" stored="false" multiValued="true">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="15"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

现在 laptop_ngram:"g74sx-a" 返回 --

<arr name="laptop_ngram">
  <str>ASUS G74SX-A1 17.3-Inch Gaming Laptop</str>
</arr>

但 laptop_ngram:"g74sx-a1" 什么也没找到。

顺便说一句,转义“-”没有任何区别。

有什么想法吗?

【问题讨论】:

  • 有什么理由不使用相同的分析器集进行查询吗?
  • 你的意思是添加 solr.NGramFilterFactory 到查询分析器?
  • 是的(我需要输入 12 个字符......)

标签: search solr lucene full-text-search


【解决方案1】:

StandardTokenizerFactory 可能会对术语做一些事情。您可以在分析页面中查看。

因此更改为 WhitespaceTokenizerFactory 可以解决问题。

【讨论】:

  • 我尝试了 WhitespaceTokenizerFactory,不幸的是结果不是很好,这意味着它找到了“g74sx a1”,但在输入规范生产模型“g74sx-a1”时却没有。感谢您的指点,它向我展示了我回去寻找的新方向。似乎 WordDelimiterFilterFactory 可以提供帮助,但已经半小时了,我还没有弄清楚如何为我的 Solr 3.4 查找/下载/编译/添加该类:(
  • 你不需要下载它。只需将其添加到您的架构中。阅读wiki.apache.org/solr/…了解更多信息。
【解决方案2】:

感谢 O. Klein,他为我指明了新的方向。

我终于解决了 WhitespaceTokenizerFactory 加上 WordDelimiterFilterFactory --

<fieldType name="ngram" class="solr.TextField" positionIncrementGap="100" stored="false" multiValued="true">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" preserveOriginal="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="15"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

适用于“g74sx”、“g74sx-”、“g74sx-a”和“g74sx-a1”

然而,旅程并没有到此结束,因为我仍在探索其中的原因——

“G74SX-XA1”与“g74sx-x”和“g74sx-xa1”一起找到,但不是“g74sx-xa”...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    相关资源
    最近更新 更多