From da61e695e7f066d1dafe580586e109c118cfb188 Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Wed, 2 Feb 2022 02:02:24 -0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=95=B5=F0=9F=8F=BC=E2=80=8D=E2=99=82?= =?UTF-8?q?=EF=B8=8F=20Added=20volume=20name=20as=20an=20additional=20sear?= =?UTF-8?q?ch=20field=20to=20ES=20search?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/import.service.ts | 3 +- services/libraryqueue.service.ts | 2 + services/search.service.ts | 101 +++++++++++++++++++++++++------ 3 files changed, 87 insertions(+), 19 deletions(-) diff --git a/services/import.service.ts b/services/import.service.ts index 12c1a88..c20ac35 100644 --- a/services/import.service.ts +++ b/services/import.service.ts @@ -475,7 +475,8 @@ export default class ImportService extends Service { { queryObject: { issueId: issue.id, - issueName: + issueName: issueMetadata.name, + volumeName: issueMetadata.volume .name, issueNumber: diff --git a/services/libraryqueue.service.ts b/services/libraryqueue.service.ts index e4f4523..5d72807 100644 --- a/services/libraryqueue.service.ts +++ b/services/libraryqueue.service.ts @@ -114,6 +114,7 @@ export default class LibraryQueueService extends Service { !isUndefined(matchesInLibrary) ) { console.log("Matches found in library:"); + console.log(matchesInLibrary); const foo = extend( { issue: job.data.queryObject.issueMetadata }, @@ -152,6 +153,7 @@ export default class LibraryQueueService extends Service { ctx: Context<{ queryObject: { issueName: string; + volumeName: string; issueNumber: string; issueId: string; issueMetadata: object; diff --git a/services/search.service.ts b/services/search.service.ts index c729749..a4e717d 100644 --- a/services/search.service.ts +++ b/services/search.service.ts @@ -19,7 +19,7 @@ const client = new Client({ import { DbMixin } from "../mixins/db.mixin"; import Comic from "../models/comic.model"; import { refineQuery } from "filename-parser"; -import { filter } from "lodash"; +import { filter, isEmpty, isNull } from "lodash"; console.log(client); @@ -42,31 +42,96 @@ export default class SettingsService extends Service { params: {}, timeout: 400000, async handler( - ctx: Context<{ queryObject: { - issueName: string, - issueNumber: string, - } }> + ctx: Context<{ + queryObject: { + issueName: string; + volumeName: string; + issueNumber: string; + }; + }> ) { - console.log(ctx.params); - return Comic.esSearch({ - query: { + let elasticSearchQuery = {}; + console.log( + "Volume: ", + ctx.params.queryObject.volumeName + ); + console.log( + "Issue: ", + ctx.params.queryObject.issueName + ); + if ( + isNull(ctx.params.queryObject.volumeName) + ) { + elasticSearchQuery = { match: { "rawFileDetails.name": { - query: ctx.params.queryObject.issueName, - operator: "or", + query: ctx.params.queryObject + .issueName, + operator: "and", fuzziness: "AUTO", }, }, - - }, + }; + } else if ( + isNull(ctx.params.queryObject.issueName) + ) { + elasticSearchQuery = { + match: { + "rawFileDetails.name": { + query: ctx.params.queryObject + .volumeName, + operator: "and", + fuzziness: "AUTO", + }, + }, + }; + } else { + elasticSearchQuery = { + bool: { + should: [ + { + match_phrase: { + "rawFileDetails.name": + ctx.params + .queryObject + .issueName, + }, + }, + { + match_phrase: { + "rawFileDetails.name": + ctx.params + .queryObject + .volumeName, + }, + }, + ], + }, + }; + } + console.log(elasticSearchQuery); + return Comic.esSearch({ + query: elasticSearchQuery, }).then(function (results) { // results here - const foo = results.body.hits.hits.map((hit) => { - const parsedFilename = refineQuery(hit._source.rawFileDetails.name); - if(parsedFilename.searchParams.searchTerms.number === parseInt(ctx.params.queryObject.issueNumber, 10)) { - return hit; - } - }); + const foo = results.body.hits.hits.map( + (hit) => { + const parsedFilename = refineQuery( + hit._source.rawFileDetails.name + ); + if ( + parsedFilename.searchParams + .searchTerms.number === + parseInt( + ctx.params.queryObject + .issueNumber, + 10 + ) + ) { + return hit; + } + } + ); return filter(foo, null); }); },