From e3af3f526c20711d5f415dc1cb09c5267841e16b Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Fri, 14 Jul 2023 17:07:25 +0800 Subject: [PATCH 1/3] add in:subscription and in:library in search scope --- packages/api/src/elastic/pages.ts | 44 +++++++++++++++++++++++++++++++ packages/api/src/utils/search.ts | 7 +++++ 2 files changed, 51 insertions(+) diff --git a/packages/api/src/elastic/pages.ts b/packages/api/src/elastic/pages.ts index 640a8449d..6b63a73a8 100644 --- a/packages/api/src/elastic/pages.ts +++ b/packages/api/src/elastic/pages.ts @@ -148,6 +148,50 @@ const appendInFilter = (builder: ESBuilder, filter: InFilter): ESBuilder => { gte: 'now-14d', }, }) + case InFilter.LIBRARY: + return builder.query('nested', { + path: 'labels', + query: { + bool: { + should: [ + { + term: { + 'labels.name': 'library', + }, + }, + { + bool: { + must_not: { + terms: { + 'labels.name': ['newsletter', 'rss'], + }, + }, + should: [], + }, + }, + ], + minimum_should_match: 1, + }, + }, + }) + case InFilter.SUBSCRIPTION: + return builder + .andQuery('nested', { + path: 'labels', + query: { + terms: { + 'labels.name': ['newsletter', 'rss'], + }, + }, + }) + .notQuery('nested', { + path: 'labels', + query: { + term: { + 'labels.name': 'library', + }, + }, + }) } return builder } diff --git a/packages/api/src/utils/search.ts b/packages/api/src/utils/search.ts index 7e4fbd08d..ccd488bb5 100644 --- a/packages/api/src/utils/search.ts +++ b/packages/api/src/utils/search.ts @@ -22,6 +22,8 @@ export enum InFilter { INBOX, ARCHIVE, TRASH, + SUBSCRIPTION, + LIBRARY, } export interface SearchFilter { @@ -123,7 +125,12 @@ const parseInFilter = ( return InFilter.ARCHIVE case 'TRASH': return InFilter.TRASH + case 'SUBSCRIPTION': + return InFilter.SUBSCRIPTION + case 'LIBRARY': + return InFilter.LIBRARY } + return query ? InFilter.ALL : InFilter.INBOX } From b3dcf0ee467492d9930b798d1f70e7dd004f00a7 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Mon, 17 Jul 2023 16:14:03 +0800 Subject: [PATCH 2/3] default return builder --- packages/api/src/elastic/pages.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/api/src/elastic/pages.ts b/packages/api/src/elastic/pages.ts index 6b63a73a8..3bb7c1095 100644 --- a/packages/api/src/elastic/pages.ts +++ b/packages/api/src/elastic/pages.ts @@ -192,8 +192,9 @@ const appendInFilter = (builder: ESBuilder, filter: InFilter): ESBuilder => { }, }, }) + default: + return builder } - return builder } const appendHasFilters = ( From be1e8169ba21b89a8523f5d7592e291b56dd86cc Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Mon, 17 Jul 2023 17:06:39 +0800 Subject: [PATCH 3/3] exclude items with newsletter or rss labels in library --- packages/api/src/elastic/pages.ts | 39 ++++++++++++++++++------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/packages/api/src/elastic/pages.ts b/packages/api/src/elastic/pages.ts index 3bb7c1095..f948c655a 100644 --- a/packages/api/src/elastic/pages.ts +++ b/packages/api/src/elastic/pages.ts @@ -149,30 +149,37 @@ const appendInFilter = (builder: ESBuilder, filter: InFilter): ESBuilder => { }, }) case InFilter.LIBRARY: - return builder.query('nested', { - path: 'labels', - query: { - bool: { - should: [ - { + return builder.query('bool', { + should: [ + { + nested: { + path: 'labels', + query: { term: { 'labels.name': 'library', }, }, - { - bool: { - must_not: { - terms: { - 'labels.name': ['newsletter', 'rss'], + }, + }, + { + bool: { + must_not: [ + { + nested: { + path: 'labels', + query: { + terms: { + 'labels.name': ['newsletter', 'rss'], + }, }, }, - should: [], }, - }, - ], - minimum_should_match: 1, + ], + should: [], + }, }, - }, + ], + minimum_should_match: 1, }) case InFilter.SUBSCRIPTION: return builder