Merge pull request #893 from omnivore-app/add-highlights-to-search-results
add highlights to search results
This commit is contained in:
@ -25,7 +25,8 @@ export const addHighlightToPage = async (
|
||||
ctx._source.highlights = [params.highlight]
|
||||
} else {
|
||||
ctx._source.highlights.add(params.highlight)
|
||||
}`,
|
||||
}
|
||||
ctx._source.updatedAt = params.highlight.updatedAt`,
|
||||
lang: 'painless',
|
||||
params: {
|
||||
highlight: highlight,
|
||||
@ -102,11 +103,12 @@ export const deleteHighlight = async (
|
||||
index: INDEX_ALIAS,
|
||||
body: {
|
||||
script: {
|
||||
source:
|
||||
'ctx._source.highlights.removeIf(h -> h.id == params.highlightId)',
|
||||
source: `ctx._source.highlights.removeIf(h -> h.id == params.highlightId);
|
||||
ctx._source.updatedAt = params.updatedAt`,
|
||||
lang: 'painless',
|
||||
params: {
|
||||
highlightId: highlightId,
|
||||
updatedAt: new Date(),
|
||||
},
|
||||
},
|
||||
query: {
|
||||
@ -257,7 +259,8 @@ export const updateHighlight = async (
|
||||
body: {
|
||||
script: {
|
||||
source: `ctx._source.highlights.removeIf(h -> h.id == params.highlight.id);
|
||||
ctx._source.highlights.add(params.highlight)`,
|
||||
ctx._source.highlights.add(params.highlight);
|
||||
ctx._source.updatedAt = params.highlight.updatedAt`,
|
||||
lang: 'painless',
|
||||
params: {
|
||||
highlight: highlight,
|
||||
|
||||
@ -15,13 +15,16 @@ export const addLabelInPage = async (
|
||||
body: {
|
||||
script: {
|
||||
source: `if (ctx._source.labels == null) {
|
||||
ctx._source.labels = [params.label]
|
||||
ctx._source.labels = [params.label];
|
||||
ctx._source.updatedAt = params.updatedAt
|
||||
} else if (!ctx._source.labels.any(label -> label.name == params.label.name)) {
|
||||
ctx._source.labels.add(params.label)
|
||||
ctx._source.labels.add(params.label) ;
|
||||
ctx._source.updatedAt = params.updatedAt
|
||||
} else { ctx.op = 'none' }`,
|
||||
lang: 'painless',
|
||||
params: {
|
||||
label: label,
|
||||
updatedAt: new Date(),
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -99,20 +102,22 @@ export const deleteLabel = async (
|
||||
ctx: PageContext
|
||||
): Promise<boolean> => {
|
||||
try {
|
||||
console.log('deleting label', label)
|
||||
const { body } = await client.updateByQuery({
|
||||
index: INDEX_ALIAS,
|
||||
body: {
|
||||
script: {
|
||||
source: `if (ctx._source.highlights != null && ctx._source.highlights[0].labels != null) {
|
||||
ctx._source.highlights[0].labels.removeIf(label -> label.name == params.label)
|
||||
ctx._source.highlights[0].labels.removeIf(label -> label.name == params.label);
|
||||
ctx._source.updatedAt = params.updatedAt
|
||||
}
|
||||
if (ctx._source.labels != null) {
|
||||
ctx._source.labels.removeIf(label -> label.name == params.label)
|
||||
ctx._source.labels.removeIf(label -> label.name == params.label);
|
||||
ctx._source.updatedAt = params.updatedAt
|
||||
}`,
|
||||
lang: 'painless',
|
||||
params: {
|
||||
label: label,
|
||||
updatedAt: new Date(),
|
||||
},
|
||||
},
|
||||
query: {
|
||||
@ -178,15 +183,18 @@ export const updateLabel = async (
|
||||
script: {
|
||||
source: `if (ctx._source.labels != null) {
|
||||
ctx._source.labels.removeIf(l -> l.id == params.label.id);
|
||||
ctx._source.labels.add(params.label)
|
||||
ctx._source.labels.add(params.label);
|
||||
ctx._source.updatedAt = params.updatedAt
|
||||
}
|
||||
if (ctx._source.highlights != null) {
|
||||
ctx._source.highlights[0].labels.removeIf(l -> l.id == params.label.id);
|
||||
ctx._source.highlights[0].labels.add(params.label)
|
||||
ctx._source.highlights[0].labels.add(params.label);
|
||||
ctx._source.updatedAt = params.updatedAt
|
||||
}`,
|
||||
lang: 'painless',
|
||||
params: {
|
||||
label: label,
|
||||
updatedAt: new Date(),
|
||||
},
|
||||
},
|
||||
query: {
|
||||
@ -252,10 +260,12 @@ export const setLabelsForHighlight = async (
|
||||
index: INDEX_ALIAS,
|
||||
body: {
|
||||
script: {
|
||||
source: `ctx._source.highlights[0].labels = params.labels`,
|
||||
source: `ctx._source.highlights[0].labels = params.labels;
|
||||
ctx._source.updatedAt = params.updatedAt`,
|
||||
lang: 'painless',
|
||||
params: {
|
||||
labels: labels,
|
||||
updatedAt: new Date(),
|
||||
},
|
||||
},
|
||||
query: {
|
||||
|
||||
@ -403,7 +403,7 @@ export const searchPages = async (
|
||||
from,
|
||||
size,
|
||||
_source: {
|
||||
excludes: ['originalHtml', 'content', 'highlights'],
|
||||
excludes: ['originalHtml', 'content'],
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@ -232,6 +232,8 @@ export interface SearchItem {
|
||||
readAt?: Date
|
||||
savedAt: Date
|
||||
updatedAt?: Date
|
||||
labels?: Label[]
|
||||
highlights?: Highlight[]
|
||||
}
|
||||
|
||||
const keys = ['_id', 'url', 'slug', 'userId', 'uploadFileId', 'state'] as const
|
||||
|
||||
@ -1512,6 +1512,7 @@ export type SearchItem = {
|
||||
contentReader: ContentReader;
|
||||
createdAt: Scalars['Date'];
|
||||
description?: Maybe<Scalars['String']>;
|
||||
highlights?: Maybe<Array<Highlight>>;
|
||||
id: Scalars['ID'];
|
||||
image?: Maybe<Scalars['String']>;
|
||||
isArchived: Scalars['Boolean'];
|
||||
@ -3841,6 +3842,7 @@ export type SearchItemResolvers<ContextType = ResolverContext, ParentType extend
|
||||
contentReader?: Resolver<ResolversTypes['ContentReader'], ParentType, ContextType>;
|
||||
createdAt?: Resolver<ResolversTypes['Date'], ParentType, ContextType>;
|
||||
description?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
||||
highlights?: Resolver<Maybe<Array<ResolversTypes['Highlight']>>, ParentType, ContextType>;
|
||||
id?: Resolver<ResolversTypes['ID'], ParentType, ContextType>;
|
||||
image?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
|
||||
isArchived?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
|
||||
|
||||
@ -1070,6 +1070,7 @@ type SearchItem {
|
||||
contentReader: ContentReader!
|
||||
createdAt: Date!
|
||||
description: String
|
||||
highlights: [Highlight!]
|
||||
id: ID!
|
||||
image: String
|
||||
isArchived: Boolean!
|
||||
|
||||
@ -1499,6 +1499,7 @@ const schema = gql`
|
||||
language: String
|
||||
readAt: Date
|
||||
savedAt: Date!
|
||||
highlights: [Highlight!]
|
||||
}
|
||||
|
||||
type SearchItemEdge {
|
||||
|
||||
@ -180,6 +180,9 @@ const searchQuery = (keyword = '') => {
|
||||
url
|
||||
createdAt
|
||||
updatedAt
|
||||
highlights {
|
||||
id
|
||||
}
|
||||
}
|
||||
}
|
||||
pageInfo {
|
||||
@ -1021,6 +1024,15 @@ describe('Article API', () => {
|
||||
expect(res.body.data.search.edges[3].node.id).to.eq(pages[1].id)
|
||||
expect(res.body.data.search.edges[4].node.id).to.eq(pages[0].id)
|
||||
})
|
||||
|
||||
it('should return highlights in pages', async () => {
|
||||
const res = await graphqlRequest(query, authToken).expect(200)
|
||||
|
||||
expect(res.body.data.search.edges[0].node.highlights.length).to.eql(1)
|
||||
expect(res.body.data.search.edges[0].node.highlights[0].id).to.eq(
|
||||
highlights[4].id
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
context('when type:highlights is in the query', () => {
|
||||
|
||||
Reference in New Issue
Block a user