fuseJS нечеткий поиск не работает для меня

Есть ли там эксперты fuseJS, которые могут сказать мне, почему fuseJS нечеткий поиск не работает для меня, как мне кажется. (См. Демонстрационный код ниже.) Когда я выполняю поиск «пресетов», я получаю один результат, который возвращается:

пресетов ... eDirectory ... 2018/5/30 17:22:50 ... 4 KB

Но когда я так ищу «наборы», я не получаю никаких результатов. Разве я не должен получать одинаковые результаты для обоих этих поисков? Нужно ли добавлять что-то к этим опциям? Или этот тип поиска невозможен с помощью fuseJS?

Заранее спасибо за любую помощь, которую вы можете мне дать.

ВЕЧЕРА

    <!DOCTYPE html>
<html lang="en">
<head>
    <title>Fuse.js example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/3.0.4/fuse.min.js"></script>
</head>
<body>
    <h2>data:</h2>
    <textarea id="json" cols="30" rows="10"></textarea>
    <h2>Search for: <span id="searchString"></span></h2>
    <h2>Results:</h2>
    <div id="results"></div>
    <script>
    files =[
                {
                    name: "zips",
                    type: "bDirectory",
                    dateModified: "2018/5/10 17:39:27",
                    size: "1 KB"
                }
                ,
                {
                    name: "presets",
                    type: "eDirectory",
                    dateModified: "2018/5/30 17:22:50",
                    size: "4 KB"
                }
                ,
                {
                    name: "workflow",
                    type: "dDirectory",
                    dateModified: "2018/6/11 7:23:11",
                    size: "5 KB"
                }
                ,
                {
                    name: "software",
                    type: "aDirectory",
                    dateModified: "2018/6/14 14:35:36",
                    size: "2 KB"
                }
                ,
                {
                    name: "nmm_data",
                    type: "fDirectory",
                    dateModified: "2018/6/14 15:37:08",
                    size: "6 KB"
                }
                ,
                {
                    name: "jobs",
                    type: "cDirectory",
                    dateModified: "2018/6/15 13:43:47",
                    size: "3 KB"
                }
            ];

    var searchString = "presets";
    document.getElementById("searchString").innerHTML = searchString;

    document.getElementById("json").value=JSON.stringify(files);

    var options = {
        keys: ['name','type', "dateModified", "size"],
        threshold:0.0,
        caseSensitive:false
    }

    var f = new Fuse(files, options);
    var output = f.search(searchString);

    console.log(output);
    for(i=0;i<output.length;i++){
        document.getElementById('results').innerHTML += output[i].name + ' ... ' + output[i].type + ' ... ' + output[i].dateModified + ' ... ' + output[i].size + '<br />'
    }



</script>
</body>
</html>

javascript,fuzzy-search,fuse,fuzzy-logic,

1

Ответов: 1


1 принят

Просто взгляните на threshold(взято из http://fusejs.io/ )

0.0

В какой момент алгоритм совпадения сдаётся. Порог 1.0требует идеального соответствия (как букв, так и местоположения), порог которого 0.2будет соответствовать чему угодно.

и, например, изменить значение threshold. Затем вы получаете результат.

Вы можете попробовать с большим набором данных несколько разных значений thresholdи проверить результаты.

var files = [{ name: "zips", type: "bDirectory", dateModified: "2018/5/10 17:39:27", size: "1 KB" }, { name: "presets", type: "eDirectory", dateModified: "2018/5/30 17:22:50", size: "4 KB" }, { name: "workflow", type: "dDirectory", dateModified: "2018/6/11 7:23:11", size: "5 KB" }, { name: "software", type: "aDirectory", dateModified: "2018/6/14 14:35:36", size: "2 KB" }, { name: "nmm_data", type: "fDirectory", dateModified: "2018/6/14 15:37:08", size: "6 KB" }, { name: "jobs", type: "cDirectory", dateModified: "2018/6/15 13:43:47", size: "3 KB" }],
    searchString = "sets",
    options = { keys: ['name', 'type', "dateModified", "size"], threshold: 0.2, caseSensitive: false },
    f = new Fuse(files, options),
    output = f.search(searchString),
    i;

document.getElementById("searchString").innerHTML = searchString;
document.getElementById("json").value = JSON.stringify(files);
console.log(output);

for (i = 0; i < output.length; i++) {
    document.getElementById('results').innerHTML += output[i].name + ' ... ' + output[i].type + ' ... ' + output[i].dateModified + ' ... ' + output[i].size + '<br />'
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/3.0.4/fuse.min.js"></script>
<h2>data:</h2>
<textarea id="json" cols="30" rows="10"></textarea>
<h2>Search for: <span id="searchString"></span></h2>
<h2>Results:</h2>
<div id="results"></div>

JavaScript, нечеткий поиск, взрыватель, нечеткая логика,
Похожие вопросы