Sharing title filter function between manticore update module and sync tool, fixing sync tool title filter word boundaries.

This commit is contained in:
DebaucheryLibrarian 2024-07-05 02:55:02 +02:00
parent f11a009395
commit 36a51f0491
3 changed files with 13 additions and 2 deletions

View File

@ -6,6 +6,7 @@ const args = require('yargs').argv;
const { format } = require('date-fns'); const { format } = require('date-fns');
const knex = require('../knex'); const knex = require('../knex');
const filterTitle = require('../utils/filter-title');
const mantiClient = new manticore.ApiClient(); const mantiClient = new manticore.ApiClient();
@ -116,7 +117,7 @@ async function init() {
const docs = scenes.map((scene) => { const docs = scenes.map((scene) => {
const flatActors = scene.actors.flatMap((actor) => actor.f2.match(/[\w']+/g)); // match word characters to filter out brackets etc. const flatActors = scene.actors.flatMap((actor) => actor.f2.match(/[\w']+/g)); // match word characters to filter out brackets etc.
const flatTags = scene.tags.filter((tag) => tag.f3 > 6).flatMap((tag) => (tag.f4 ? `${tag.f2} ${tag.f4}` : tag.f2).match(/[\w']+/g)); // only make top tags searchable to minimize cluttered results const flatTags = scene.tags.filter((tag) => tag.f3 > 6).flatMap((tag) => (tag.f4 ? `${tag.f2} ${tag.f4}` : tag.f2).match(/[\w']+/g)); // only make top tags searchable to minimize cluttered results
const filteredTitle = scene.title && [...flatActors, ...flatTags].reduce((accTitle, tag) => accTitle.replace(new RegExp(tag.replace(/[^\w\s]+/g, ''), 'i'), ''), scene.title).trim().replace(/\s{2,}/, ' '); const filteredTitle = filterTitle(scene.title, [...flatActors, ...flatTags]);
return { return {
replace: { replace: {

View File

@ -7,6 +7,7 @@ const knex = require('./knex');
const logger = require('./logger')(__filename); const logger = require('./logger')(__filename);
const bulkInsert = require('./utils/bulk-insert'); const bulkInsert = require('./utils/bulk-insert');
const chunk = require('./utils/chunk'); const chunk = require('./utils/chunk');
const filterTitle = require('./utils/filter-title');
const mantiClient = new manticore.ApiClient(); const mantiClient = new manticore.ApiClient();
const indexApi = new manticore.IndexApi(mantiClient); const indexApi = new manticore.IndexApi(mantiClient);
@ -123,7 +124,7 @@ async function updateManticoreSceneSearch(releaseIds) {
const docs = scenes.rows.map((scene) => { const docs = scenes.rows.map((scene) => {
const flatActors = scene.actors.flatMap((actor) => actor.f2.split(' ')); const flatActors = scene.actors.flatMap((actor) => actor.f2.split(' '));
const flatTags = scene.tags.filter((tag) => tag.f3 > 6).flatMap((tag) => [tag.f2].concat(tag.f4)).filter(Boolean); // only make top tags searchable to minimize cluttered results const flatTags = scene.tags.filter((tag) => tag.f3 > 6).flatMap((tag) => [tag.f2].concat(tag.f4)).filter(Boolean); // only make top tags searchable to minimize cluttered results
const filteredTitle = scene.title && [...flatActors, ...flatTags].reduce((accTitle, tag) => accTitle.replace(new RegExp(`\\b${tag.replace(/[^\w\s]+/g, '')}\\b`, 'gi'), ''), scene.title).trim().replace(/\s{2,}/, ' '); const filteredTitle = filterTitle(scene.title, [...flatActors, ...flatTags]);
return { return {
replace: { replace: {

View File

@ -0,0 +1,9 @@
function filterTitle(title, keys) {
if (!title) {
return title;
}
return keys.reduce((accTitle, tag) => accTitle.replace(new RegExp(`\\b${tag.replace(/[^\w\s]+/g, '')}\\b`, 'gi'), ''), title).trim().replace(/\s{2,}/, ' ');
}
module.exports = filterTitle;