我想使用Jquery从客户端进行全文搜索。找到了一些解决方案,但它们都给出了完全匹配。
我想对数据执行布尔搜索。数据以树格式存在于客户端。
EG。如果我在搜索引擎上放置所需的搜索过滤器,它将显示与相关数据的完全匹配,同一搜索想要在客户端执行。
尝试 - http://www.redotheweb.com/2013/05/15/client-side-full-text-search-in-css.html 它给出完全匹配。但如果我在搜索字段中添加多个单词则会失败。寻找更好的解决方案。
有人知道如何进行这种搜索吗?或者知道任何插件,请建议最好 提前致谢。 :)
答案 0 :(得分:2)
你可以使用FuseJs。当然它不是一个jquery插件,而是一个javascript库。 它在后台使用模糊搜索来找到你想要的东西。
FuseJs是一种轻量级模糊搜索,在JavaScript中,没有依赖关系。
您可以查看Demo and usage here
以下是图书馆的快速浏览。
让我们抓住这个对象数组作为我们的模型:
var list = [
{
title: "Old Man's War",
author: {
firstName: "John",
lastName: "Scalzi"
}
},
{
title: "The Lock Artist",
author: {
firstName: "Steve",
lastName: "Hamilton"
}
},
{
title: "HTML5",
author: {
firstName: "Remy",
lastName: "Sharp"
}
}
]
允许搜索这些数组并使用键找到项目:
var options = {
shouldSort: true,
threshold: 0.6,
location: 0,
distance: 100,
maxPatternLength: 32,
minMatchCharLength: 1,
keys: [
"title",
"author.firstName"
]
};
var fuse = new Fuse(list, options);
var result = fuse.search("The Lock Artist"); //this can be read from an input
结果将是:
[
{
"title": "The Lock Artist",
"author": {
"firstName": "Steve",
"lastName": "Hamilton"
}
}
]
您可以在official website中看到很多选项。
请注意更好的结果:
为了获得更好的结果和更精确的匹配,您应该更改阈值和距离选项。
阈值:
匹配算法在什么时候放弃。阈值0.0需要完美匹配(字母和位置),阈值1.0将匹配任何内容。
距离:
确定匹配必须与模糊位置(由位置指定)的接近程度。距离模糊位置的距离字符的精确字母匹配将得分为完全不匹配。距离为0要求匹配位于指定的确切位置,距离1000要求完全匹配,使用0.8的阈值在要找到的位置的800个字符内。
例如在官方网站上搜索单词" Steve"你会得到" Jeeves"结果也是。正如我所说,我们应该改变距离和门槛。
在这种情况下,设置为:
阈值:0.2
距离:0