Algolia - 获取质量记录并使用过滤器删除



我正在使用Algolia进行搜索,我们得到了一大堆记录。我们想要删除一些记录,并决定删除比X日期早的记录。

首先我使用这个

const records = [];
const deleteRecordsBeforeDateAlgolia = (date) => {
let client;
*****
const index = client.initIndex('function_message');
//get the records before the given date
try {
index.search('',{
filters: `time_stamp < ${date}`
}).then(({hits}) => {
if(hits.length > 0) {
for (const hit of hits) {
index.deleteObject(hit.objectID);
records.push(hit.objectID);
}
}
if(hits.length === 0) {
console.log(`Deleted ${records.length} records`);
} else {
deleteRecordsBeforeDateAlgolia(date);
}
});
} catch (err) {
console.error(err);
}
};

,但我意识到这不是,优化+将是非常缓慢的删除在prod上。你能告诉我如何我可以得到大量的数据与过滤器(时间戳在这种情况下),然后删除所有它们?

<标题>编辑
const records = [];
const deleteRecordsBeforeDateAlgolia = (date) => {
let client;
//creds stuff

const index = client.initIndex('function_message');
//get the records before the given date
try {
const search =  index.browseObjects({
filters: `time_stamp < ${date}`
}).then(res => {
//IT SHOWS RESPONSE IS UNDEFINED
res.forEach(record => {
records.push(record);
});
console.log(`found ${records.length} records`);
});
} catch (err) {
console.error(err);
}
};

browseObjects接受一个批回调函数,该函数在每批命中时调用,您可以指定如何处理批处理。可选参数列表可以在这里找到

像这样的东西应该可以工作

const records = [];
const deleteFromIndex = (idArray,index) => {
index.deleteObjects(idArray).then(({ objectIDs }) => {
console.log(objectIDs);
});
}

const deleteRecordsBeforeDateAlgolia = (date) => {
let client;
client = algoliasearch('algoliaApp', 'algoliaKey');
const index = client.initIndex('function_message');
try {
index.browseObjects({
filters: `time_stamp<${date}`,
query: '',
batch: (batch) => {       
records.push(...batch);  //push each batch into records array
}
})
.then(() => {
const idArray = records.map(({objectID}) => objectID) //get an array of objectIDs
deleteFromIndex(idArray, index)
});
} catch (err) {
console.error(err);
}
};
deleteRecordsBeforeDateAlgolia('some date')

最新更新