gpt4 book ai didi

javascript - IndexedDB模糊搜索

转载 作者:行者123 更新时间:2023-12-03 02:48:29 30 4
gpt4 key购买 nike

好吧,首先,对不起我的英语。

我正在从事一个 Web 项目,当我在输入框中键入内容时,该项目会显示建议,但我想使用 IndexedDB 来提高 Firefox 中的查询速度。

使用 WebSQL 我有这样一句话:

db.transaction(function (tx) {
var SQL = 'SELECT "column1",
"column2"
FROM "table"
WHERE "column1" LIKE ?
ORDER BY "sortcolumn" DESC
LIMIT 6';

tx.executeSql(SQL, [searchTerm + '%'], function(tx, rs) {
// Process code here
});
});

我想用 IndexedDB 做同样的事情,我有这个代码:

db.transaction(['table'], 'readonly')
.objectStore('table')
.index('sortcolumn')
.openCursor(null, 'prev')
.onsuccess = function (e) {
e || (e = event);
var cursor = e.target.result;
if (cursor) {
if (cursor.value.column1.substr(0, searchTerm.length) == searchTerm) {
// Process code here
} else {
cursor.continue();
}
}
};

但是速度太慢,而且我的代码有错误。我想知道是否有更好的方法来做到这一点。

谢谢回复。

最佳答案

我终于找到了解决这个问题的方法。

解决方案包括在搜索词和搜索词之间绑定(bind)一个关键范围,并在最后添加一个“z”字母。示例:

db.transaction(['table'], 'readonly')
.objectStore('table')
.openCursor(
IDBKeyRange.bound(searchTerm, searchTerm + '\uffff'), // The important part, thank Velmont to point out
'prev')
.onsuccess = function (e) {
e || (e = event);
var cursor = e.target.result;
if (cursor) {
// console.log(cursor.value.column1 + ' = ' + cursor.value.column2);
cursor.continue();
}
};

因为我需要对结果进行排序,所以我在事务之前定义了一个数组,然后我们在加载所有数据时调用它,如下所示:

var result = [];
db.transaction(['table'], 'readonly')
.objectStore('table')
.openCursor(
IDBKeyRange.bound(searchTerm, searchTerm + '\uffff'), // The important part, thank Velmont to point out
'prev')
.onsuccess = function (e) {
e || (e = event);
var cursor = e.target.result;
if (cursor) {
result.push([cursor.value.column1, cursor.value.sortcolumn]);
cursor.continue();
} else {
if (result.length) {
result.sort(function (a, b) {
return a[1] - b[2];
});
}

// Process code here
}
};

关于javascript - IndexedDB模糊搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7086180/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com