【问题标题】:Fuse.js : How to return an exact match when there are two words to search for?Fuse.js:当有两个单词要搜索时,如何返回完全匹配?
【发布时间】:2017-11-11 18:49:12
【问题描述】:

这就是我想要完成的。

Old War 不应该匹配,但确实匹配。 -> 这不是我要找的,必须有一个完全匹配,即使有两个词。 Old Man 是肯定的,但Old War 是否定的。

Man's War 应该匹配。此刻确实如此。

Silmarillion 应该匹配。此刻确实如此。

The Silmarillion 也应该匹配。此刻确实如此。

var express = require('express');
var router = express.Router();
var path = require("path");
var async1 = require("async");
var Fuse = require("fuse.js");

var options = {
  shouldSort: true,
  tokenize: true,
  matchAllTokens: true,
  findAllMatches: true,
  threshold: 0,
  location: 0,
  distance: 0,
  maxPatternLength: 32,
  minMatchCharLength: 2,
  keys: ["title"]
};


var arr = [
  {
    title: "Old Man's War",
    author: {
      firstName: "John",
      lastName: "Scalzi"
    }
  }, 
  {
    title: "The SilmarillionADDITIONALTEXT",
    author: {
      firstName: "J.R.R",
      lastName: "Tolkien"
    }
  }
];

var keywords = ["Old War", "random title"];

router.get('/search', function (req, res, next) {

  async1.waterfall([
    function (callback) {
      var fuse = new Fuse(r, options);

      async1.map(keywords, function (keyword, asyncCallback) {
        var results = fuse.search(keyword);

        if (results.length !== 0) {
          async1.map(results, function (result, async2Callback) {
            console.log(result.title + " " + keyword);
          });
        }
      });
      callback(null, 'done!');
    }
  ], function (err, result) {
    res.sendStatus(200);
  });

});

【问题讨论】:

    标签: node.js fuse.js


    【解决方案1】:

    您将 tokenize 设置为 true。这意味着您的搜索“旧战争”被标记为 [“旧”,“战争”]。这两个令牌都完美匹配,因此可以正常工作。要实现您想要的输出,请将 tokenize 设置为 false。此外,将 tokenize 设置为 true 会忽略阈值、位置和距离的设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      相关资源
      最近更新 更多