Fuse.js: Как вернуть точное совпадение, когда есть два слова для поиска?
Вот что я пытаюсь сделать.
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);
});
});
0 ответов
Вы устанавливаете tokenize в true. Это означает, что ваш поиск "Старая война" будет размечен как ["Старая", "Война"]. Оба эти токена идеально совпадают, поэтому он работает правильно. Чтобы получить желаемый результат, установите tokenize в false. Кроме того, установка tokenize в true игнорирует настройки для порога, местоположения и расстояния.