lunr没有返回完全匹配作为最高优先级

时间:2017-09-18 14:52:22

标签: javascript json lunrjs

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

我在打字稿中的月份配置

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)。我错过了任何配置吗?

我需要完全匹配的字符串才能获得最高分,我怎样才能实现这一目标?

1 个答案:

答案 0 :(得分:0)

Lunr(版本0.x和1.x)会自动为每个搜索字词添加一个通配符,因此当您搜索" pan d ca"你实际上得到的结果是" pan * d * ca *"这就是为什么你得到额外的结果。有一些逻辑试图提高精确匹配,但是,特别是对于多字搜索,它并不总是提升匹配以获得预期的结果。这是不可配置的。

如果可以的话,我会向Lunr 2.x建议upgrading,它可以更好地控制searching