Может кто поможет, у меня что то в голову ничего дельного не лезет =(
Есть пол миллиона документов вида
{
_id: ObjectId(),
tags: [слово, слово 2, слово 3]
href: 'ссылка на документ'
}
Title страницы формируется за счет tags, банально tags.join(', '), страницы дубли вылетают из индекса, и возможно пагубно влияют на сайт в целом.
Поэтому куча однотипных страниц, порядка 70 000 тысяч, на них только фото немного разные и всё. Пытался править в ручную, т.е. добавлять, изменять теги, это ужасно, до пенсии точно буду этим страдать =(
Хочу добиться следующего:
1. Определить родителя дублей
2. Получить ссылку на родителя (href)
3. Найти другие дубликаты и создать доп. поле canonical в которое поместить ссылку на родителя
Сейчас делаю отлов дублей следующим образом
Получаю к примеру 500 записей из базы
function getDocuments(request) {
return Wallpapers.aggregate([
{ $sort: request.sorting },
{ $match: request.query },
{ $skip: request.skip },
{ $limit: request.limit },
{
$project: {
_id: 1,
href: 1,
tags: 1
}
}
])
}
Затем перебираю записи, нахожу дули и пушу их в массив для последующего вывода их на сайте для правки тегов вручную
function cleanUniqueDocument(request) {
return arr = [], tags = [], Promise.all(request.map( async (e) => {
return tags.indexOf(e.tags.join(',')) < 0 && tags.push(e.tags.join(',')) || arr.push(e)
}))
.then(e => {
return arr || []
})
}
Все Ок, на для ручной правки документов на самом сайте, вижу список дублей - правлю его!
Теперь думаю, как автоматизировать процесс чтобы не править теги, а прописать сразу canonical дубликату с URL родителя. По сути нужно вместе с тегами записывать ссылку, т.е. формировать массив объектов, а потом в этом массиве искать дубликаты по тегам, если есть совпадение то в из массива объектом взять URL родителя и изменить документ. Такая у меня каша в голове =( на счет этого всего