@@ -190,24 +190,26 @@ func (k *knowledgeSVC) indexDocument(ctx context.Context, event *entity.Event) (
190190 collectionName := getCollectionName (doc .KnowledgeID )
191191
192192 if ! doc .IsAppend {
193- ids , err := k .sliceRepo .GetDocumentSliceIDs (ctx , []int64 {doc .ID })
194- if err != nil {
195- return errorx .New (errno .ErrKnowledgeDBCode , errorx .KV ("msg" , fmt .Sprintf ("get document slice ids failed, err: %v" , err )))
196- }
197- if len (ids ) > 0 {
198- if err = k .sliceRepo .DeleteByDocument (ctx , doc .ID ); err != nil {
199- return errorx .New (errno .ErrKnowledgeDBCode , errorx .KV ("msg" , fmt .Sprintf ("delete document slice failed, err: %v" , err )))
193+ if doc .Type != knowledge .DocumentTypeImage {
194+ ids , err := k .sliceRepo .GetDocumentSliceIDs (ctx , []int64 {doc .ID })
195+ if err != nil {
196+ return errorx .New (errno .ErrKnowledgeDBCode , errorx .KV ("msg" , fmt .Sprintf ("get document slice ids failed, err: %v" , err )))
200197 }
201- for _ , manager := range k .searchStoreManagers {
202- s , err := manager .GetSearchStore (ctx , collectionName )
203- if err != nil {
204- return errorx .New (errno .ErrKnowledgeSearchStoreCode , errorx .KV ("msg" , fmt .Sprintf ("get search store failed, err: %v" , err )))
198+ if len (ids ) > 0 {
199+ if err = k .sliceRepo .DeleteByDocument (ctx , doc .ID ); err != nil {
200+ return errorx .New (errno .ErrKnowledgeDBCode , errorx .KV ("msg" , fmt .Sprintf ("delete document slice failed, err: %v" , err )))
205201 }
206- if err := s .Delete (ctx , slices .Transform (event .SliceIDs , func (id int64 ) string {
207- return strconv .FormatInt (id , 10 )
208- })); err != nil {
209- logs .Errorf ("[indexDocument] delete knowledge failed, err: %v" , err )
210- return errorx .New (errno .ErrKnowledgeSearchStoreCode , errorx .KV ("msg" , fmt .Sprintf ("delete search store failed, err: %v" , err )))
202+ for _ , manager := range k .searchStoreManagers {
203+ s , err := manager .GetSearchStore (ctx , collectionName )
204+ if err != nil {
205+ return errorx .New (errno .ErrKnowledgeSearchStoreCode , errorx .KV ("msg" , fmt .Sprintf ("get search store failed, err: %v" , err )))
206+ }
207+ if err := s .Delete (ctx , slices .Transform (event .SliceIDs , func (id int64 ) string {
208+ return strconv .FormatInt (id , 10 )
209+ })); err != nil {
210+ logs .Errorf ("[indexDocument] delete knowledge failed, err: %v" , err )
211+ return errorx .New (errno .ErrKnowledgeSearchStoreCode , errorx .KV ("msg" , fmt .Sprintf ("delete search store failed, err: %v" , err )))
212+ }
211213 }
212214 }
213215 }
@@ -298,34 +300,68 @@ func (k *knowledgeSVC) indexDocument(ctx context.Context, event *entity.Event) (
298300 seqOffset += 1
299301 }
300302
301- sliceModels := make ([]* model.KnowledgeDocumentSlice , 0 , len (parseResult ))
302- for i , src := range parseResult {
303- now := time .Now ().UnixMilli ()
304- sliceModel := & model.KnowledgeDocumentSlice {
305- ID : allIDs [i ],
306- KnowledgeID : doc .KnowledgeID ,
307- DocumentID : doc .ID ,
308- Content : parseResult [i ].Content ,
309- Sequence : seqOffset + float64 (i ),
310- CreatedAt : now ,
311- UpdatedAt : now ,
312- CreatorID : doc .CreatorID ,
313- SpaceID : doc .SpaceID ,
314- Status : int32 (model .SliceStatusProcessing ),
315- FailReason : "" ,
316- }
317- if doc .Type == knowledge .DocumentTypeTable {
318- sliceEntity , err := convertFn (src , doc .KnowledgeID , doc .ID , doc .CreatorID )
303+ if doc .Type == knowledge .DocumentTypeImage {
304+ if len (parseResult ) != 0 {
305+ slices , _ , err := k .sliceRepo .FindSliceByCondition (ctx , & entity.WhereSliceOpt {DocumentID : doc .ID })
319306 if err != nil {
320- logs .CtxErrorf (ctx , "[indexDocument] convert document failed, err: %v" , err )
321- return errorx .New (errno .ErrKnowledgeSystemCode , errorx .KV ("msg" , fmt .Sprintf ("convert document failed, err: %v" , err )))
307+ return errorx .New (errno .ErrKnowledgeDBCode , errorx .KV ("msg" , fmt .Sprintf ("find slice failed, err: %v" , err )))
308+ }
309+ var slice * model.KnowledgeDocumentSlice
310+ if len (slices ) > 0 {
311+ slice = slices [0 ]
312+ slice .Content = parseResult [0 ].Content
313+ } else {
314+ id , err := k .idgen .GenID (ctx )
315+ if err != nil {
316+ return errorx .New (errno .ErrKnowledgeIDGenCode , errorx .KV ("msg" , fmt .Sprintf ("GenID failed, err: %v" , err )))
317+ }
318+ slice = & model.KnowledgeDocumentSlice {
319+ ID : id ,
320+ KnowledgeID : doc .KnowledgeID ,
321+ DocumentID : doc .ID ,
322+ Content : parseResult [0 ].Content ,
323+ CreatedAt : time .Now ().UnixMilli (),
324+ UpdatedAt : time .Now ().UnixMilli (),
325+ CreatorID : doc .CreatorID ,
326+ SpaceID : doc .SpaceID ,
327+ Status : int32 (model .SliceStatusProcessing ),
328+ FailReason : "" ,
329+ }
330+ }
331+ if err = k .sliceRepo .Update (ctx , slice ); err != nil {
332+ return errorx .New (errno .ErrKnowledgeDBCode , errorx .KV ("msg" , fmt .Sprintf ("update slice failed, err: %v" , err )))
322333 }
323- sliceModel .Content = sliceEntity .GetSliceContent ()
324334 }
325- sliceModels = append (sliceModels , sliceModel )
326- }
327- if err = k .sliceRepo .BatchCreate (ctx , sliceModels ); err != nil {
328- return errorx .New (errno .ErrKnowledgeDBCode , errorx .KV ("msg" , fmt .Sprintf ("batch create slice failed, err: %v" , err )))
335+ } else {
336+ sliceModels := make ([]* model.KnowledgeDocumentSlice , 0 , len (parseResult ))
337+ for i , src := range parseResult {
338+ now := time .Now ().UnixMilli ()
339+ sliceModel := & model.KnowledgeDocumentSlice {
340+ ID : allIDs [i ],
341+ KnowledgeID : doc .KnowledgeID ,
342+ DocumentID : doc .ID ,
343+ Content : parseResult [i ].Content ,
344+ Sequence : seqOffset + float64 (i ),
345+ CreatedAt : now ,
346+ UpdatedAt : now ,
347+ CreatorID : doc .CreatorID ,
348+ SpaceID : doc .SpaceID ,
349+ Status : int32 (model .SliceStatusProcessing ),
350+ FailReason : "" ,
351+ }
352+ if doc .Type == knowledge .DocumentTypeTable {
353+ sliceEntity , err := convertFn (src , doc .KnowledgeID , doc .ID , doc .CreatorID )
354+ if err != nil {
355+ logs .CtxErrorf (ctx , "[indexDocument] convert document failed, err: %v" , err )
356+ return errorx .New (errno .ErrKnowledgeSystemCode , errorx .KV ("msg" , fmt .Sprintf ("convert document failed, err: %v" , err )))
357+ }
358+ sliceModel .Content = sliceEntity .GetSliceContent ()
359+ }
360+ sliceModels = append (sliceModels , sliceModel )
361+ }
362+ if err = k .sliceRepo .BatchCreate (ctx , sliceModels ); err != nil {
363+ return errorx .New (errno .ErrKnowledgeDBCode , errorx .KV ("msg" , fmt .Sprintf ("batch create slice failed, err: %v" , err )))
364+ }
329365 }
330366
331367 defer func () {
0 commit comments