diff --git a/syncapi/consumers/roomserver.go b/syncapi/consumers/roomserver.go index 8dc40d7f7..55d7c24ac 100644 --- a/syncapi/consumers/roomserver.go +++ b/syncapi/consumers/roomserver.go @@ -601,9 +601,11 @@ func (s *OutputRoomEventConsumer) writeFTS(ev *rstypes.HeaderedEvent, pduPositio } e.SetContentType(ev.Type()) + var relatesTo gjson.Result switch ev.Type() { case "m.room.message": e.Content = gjson.GetBytes(ev.Content(), "body").String() + relatesTo = gjson.GetBytes(ev.Content(), "m\\.relates_to") case spec.MRoomName: e.Content = gjson.GetBytes(ev.Content(), "name").String() case spec.MRoomTopic: @@ -624,13 +626,12 @@ func (s *OutputRoomEventConsumer) writeFTS(ev *rstypes.HeaderedEvent, pduPositio } // If the event is an edited message we remove the original event from the index // to avoid duplicates in the search results. - relatesTo := gjson.GetBytes(ev.Content(), "m\\.relates_to") if relatesTo.Exists() { - relatedData := relatesTo.Value().(map[string]interface{}) - if _, ok := relatedData["rel_type"]; ok && relatedData["rel_type"] == "m.replace" { + relatedData := relatesTo.Map() + if _, ok := relatedData["rel_type"]; ok && relatedData["rel_type"].Str == "m.replace" { // We remove the original event from the index if srcEventID, ok := relatedData["event_id"]; ok { - if err := s.fts.Delete(srcEventID.(string)); err != nil { + if err := s.fts.Delete(srcEventID.Str); err != nil { log.WithFields(log.Fields{ "event_id": ev.EventID(), "src_id": srcEventID,