lunr并未返回确切的匹配作为当务之急



AM使用lunr (elastic lunr0.9.5)作为Web浏览器中的搜索引擎。这也很简单而且非常快。但是,当它具有更多时,它并不是在第一个位置列出完全匹配的对象。

我的lunr配置

this.lunrIndex = lunr(function () {
                this.field('itemId');
                this.field('name');
                this.ref('itemId');
                this.pipeline.remove(lunr.stemmer)
            })

当我搜索pan d ca文本返回时,

[{
    "ref": "PANCOR DSR CAPSULE 10''S",
    "score": 0.01674628244112235
  },
  {
    "ref": "PANLID DSR CAPSULE 10''S",
    "score": 0.01674628244112235
  },
  {
    "ref": "PANSIO DSR CAPSULE 10''S",
    "score": 0.01590146213665648
  },
  {
    "ref": "PANLIFE DSR CAPSULE 10''S",
    "score": 0.015507241586286287
  },
  {
    "ref": "PANSEC DSR CAPSULE 10''S",
    "score": 0.014526355502926632
  },
  {
    "ref": "PAN D CAPSULE 10''S",
    "score": 0.011554433713104873
  }
  ]

lunr修剪可能是上述结果的原因之一,因此我从其管道执行中删除了lunr.trimmer,但仍给出相同的结果。

上面的结果显示,精确匹配的字符串(PAN D C)获得较低的分数(0.011554433713104873)。我在这里错过了任何配置吗?

我需要确切的匹配字符串应该比其他匹配的字符串获得最高的分数,我该如何实现?

lunr(版本0.x和1.x)自动将通配符附加到每个搜索词上,因此,当您搜索" pan d ca"时,您实际上会得到" pan*"的结果。d* ca*"这就是为什么您要获得额外结果的原因。有一些逻辑试图提高确切的匹配,但是,尤其是在多个单词搜索的情况下,它并不总是会提高匹配项以获得预期的结果。这是不可配置的。

如果可以的话,我建议升级到Lunr 2.X,该X可以更大地控制搜索。

相关内容

  • 没有找到相关文章

最新更新