diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts index 4e7e5bdb9e..f2bcb9917e 100644 --- a/packages/core/src/utils.ts +++ b/packages/core/src/utils.ts @@ -158,6 +158,7 @@ export interface IndexKeyOptions { _class?: Ref> docId?: Ref extra?: string[] + digest?: boolean } /** * @public @@ -171,7 +172,8 @@ export function docUpdKey (name: string, opt?: IndexKeyOptions): string { */ export function docKey (name: string, opt?: IndexKeyOptions): string { const extra = opt?.extra !== undefined && opt?.extra?.length > 0 ? `#${opt.extra?.join('#') ?? ''}` : '' - return opt?._class === undefined ? name : `${opt?._class}%${name}${extra}` + const digestName = opt?.digest === true ? name + '^digest' : name + return opt?._class === undefined ? digestName : `${opt?._class}%${digestName}${extra}` } /** @@ -182,6 +184,7 @@ export function extractDocKey (key: string): { attr: string docId?: Ref extra: string[] + digest: boolean } { let k = key if (k.startsWith(attributesPrefix)) { @@ -204,8 +207,14 @@ export function extractDocKey (key: string): { } const extra = attr.split('#') attr = extra.splice(0, 1)[0] + const digestPos = attr.indexOf('^digest') + let digest = false + if (digestPos !== -1) { + attr = attr.substring(0, digestPos) + digest = true + } - return { docId, attr, _class, extra } + return { docId, attr, _class, extra, digest } } /** diff --git a/server-plugins/collaboration/src/fulltext.ts b/server-plugins/collaboration/src/fulltext.ts index a49a812aab..9560271f9c 100644 --- a/server-plugins/collaboration/src/fulltext.ts +++ b/server-plugins/collaboration/src/fulltext.ts @@ -49,7 +49,6 @@ export class CollaborativeContentRetrievalStage implements FullTextPipelineStage stageId = contentStageId extra = ['content', 'base64'] - digest = '^digest' enabled = true @@ -111,7 +110,7 @@ export class CollaborativeContentRetrievalStage implements FullTextPipelineStage if (docInfo !== undefined) { const digest = docInfo.etag - const digestKey = docKey(val.name + this.digest, { _class: val.attributeOf }) + const digestKey = docKey(val.name, { _class: val.attributeOf, digest: true }) if (doc.attributes[digestKey] !== digest) { ;(update as any)[docUpdKey(digestKey)] = digest diff --git a/server/core/src/indexer/content.ts b/server/core/src/indexer/content.ts index 6bba3e10f1..079a4892c0 100644 --- a/server/core/src/indexer/content.ts +++ b/server/core/src/indexer/content.ts @@ -46,7 +46,6 @@ export class ContentRetrievalStage implements FullTextPipelineStage { stageId = contentStageId extra = ['content', 'base64'] - digest = '^digest' enabled = true @@ -110,7 +109,7 @@ export class ContentRetrievalStage implements FullTextPipelineStage { if (!contentType.includes('image')) { const digest = docInfo.etag - const digestKey = docKey(val.name + this.digest, { _class: val.attributeOf }) + const digestKey = docKey(val.name, { _class: val.attributeOf, digest: true }) if (doc.attributes[digestKey] !== digest) { ;(update as any)[docUpdKey(digestKey)] = digest diff --git a/server/core/src/indexer/fulltextPush.ts b/server/core/src/indexer/fulltextPush.ts index 8fd60cdb38..0ceb29e800 100644 --- a/server/core/src/indexer/fulltextPush.ts +++ b/server/core/src/indexer/fulltextPush.ts @@ -257,7 +257,7 @@ function updateDoc2Elastic ( if (v == null) { continue } - let { _class, attr, docId, extra } = extractDocKey(k) + let { _class, attr, docId, extra, digest } = extractDocKey(k) if (attr.length === 0) { continue } @@ -302,7 +302,7 @@ function updateDoc2Elastic ( } continue } - const docIdAttr = docKey(attr, { _class, extra: extra.filter((it) => it !== 'base64') }) + const docIdAttr = docKey(attr, { _class, extra: extra.filter((it) => it !== 'base64'), digest }) if (vv !== null) { // Since we replace array of values, we could ignore null doc[docIdAttr] =