1

lunr (elastic lunr0.9.5)在网络浏览器中用作搜索引擎。它既简单又非常快。但是当它有更多时,它不会在第一个位置列出完全匹配的对象。

我在 Typescript 中的 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)。我错过了这里的任何配置吗?

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

4

1 回答 1

0

Lunr(版本 0.x 和 1.x)会自动将通配符附加到每个搜索词,因此当您搜索“pan d ca”时,您实际上会得到“pan* d* ca*”的结果,这就是您得到的原因额外的结果。有一些逻辑试图提升精确匹配,但是,尤其是在多词搜索中,它并不总是将匹配提升到足以获得预期结果的程度。这是不可配置的。

如果可以,我建议升级到 Lunr 2.x,它可以更好地控制搜索

于 2017-09-20T16:30:08.100 回答