0

我想检索与令牌匹配的结果(edgeNgramed)。对于不共享前缀的令牌,它按预期工作。但是对于共享前缀的令牌,Solr 不能按预期工作。例如:如果索引词是bird box并且查询是bird b,则 solr 将返回仅具有bird并且可能带有标记bird box的结果(由于我们的索引很大,我还没有验证它)

查询构造

titlePhrasalFielName:"bird b"~2

Solr 版本 - 7.7.1

链接到分析器链的响应

这是我的分析器链。

    <fieldType name="payloadPhrasal" class="solr.TextField">
      <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms_payload.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="30"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <similarity class="com.apple.its.uss.solrcomponents.PayloadSimilarity"/>
    </fieldType>

关于如何确保在任何其他只有 . 的内容之前bird box被召回的内容的任何想法?bird bbird

笔记

  • 已经看到了在不同领域索引令牌的 stackoverflow 问题,我们不想遵循这种方法,索引可能会变得太大,我们的令牌长度实际上可以是任何东西。
  • 我们刚刚从 Solr 4.10 迁移到 Solr 7.7.1,两个版本的行为相同。尚未针对此用例探索 Solr 8。
  • 不想将所有前缀(压缩空间)存储在多值字段中。例如:b, bi, bir, bird, birdb, birdbo&birdbox因为这会导致一些非常常见的用例的过度召回。这意味着它打破的案例比实际解决的要多。
4

0 回答 0