NIMSDK-AOS  9.16.0
MsgIndexRecord.java
浏览该文件的文档.
1 package com.netease.nimlib.sdk.search.model;
2 
5 import com.netease.nimlib.search.helper.MsgIndexHelper;
6 import com.netease.nimlib.search.highlight.QueryHit;
7 import com.netease.nimlib.search.model.NIMIndexRecord;
8 import com.netease.nimlib.session.MsgDBHelper;
9 
10 import java.util.ArrayList;
11 import java.util.List;
12 
16 public class MsgIndexRecord implements Comparable<MsgIndexRecord> {
17 
21  private final NIMIndexRecord record;
22 
23  private IMMessage message;
24 
25  private final String query;
26 
27  private List<RecordHitInfo> hitInfo;
28 
29  public MsgIndexRecord(NIMIndexRecord record, String query) {
30  this.record = record;
31  this.query = query;
32  }
33 
34  public String getText() {
35  return record.content;
36  }
37 
39  return MsgIndexHelper.getSessionTypeFromNIMRecordId(record.id);
40  }
41 
42  public String getSessionId() {
43  return MsgIndexHelper.getSessionIdFromNIMRecordId(record.id);
44  }
45 
46  public long getTime() {
47  return record.time;
48  }
49 
50  public int getCount() {
51  return record.count;
52  }
53 
54  public String getQuery() {
55  return query;
56  }
57 
58  public NIMIndexRecord getRecord() {
59  return record;
60  }
61 
62  public IMMessage getMessage() {
63  if (message == null) {
64  message = MsgDBHelper.queryMessageBySeqId(record.dataid);
65  }
66 
67  return message;
68  }
69 
70  public List<RecordHitInfo> getHitInfo() {
71  if (hitInfo == null) {
72  ArrayList<QueryHit.HitInfo> hits = QueryHit.getInstance().hit(getText(), query, true, false);
73  if (hits == null || hits.isEmpty()) {
74  // 特殊情况下,搜索结果在短语高亮失效的情况下换成单个字符匹配高亮
75  hits = QueryHit.getInstance().hit(getText(), query, true, true);
76  }
77 
78  hitInfo = new ArrayList<>(hits.size());
79  for (QueryHit.HitInfo h : hits) {
80  this.hitInfo.add(new RecordHitInfo(h.start, h.end));
81  }
82  }
83 
84  return hitInfo;
85  }
86 
87  public List<RecordHitInfo> cloneHitInfo() {
88  getHitInfo();
89 
90  List<RecordHitInfo> clone = new ArrayList<>(hitInfo.size());
91  for (RecordHitInfo h : hitInfo) {
92  clone.add(new RecordHitInfo(h.start, h.end));
93  }
94 
95  return clone;
96  }
97 
98  @Override
99  public int compareTo(MsgIndexRecord msgIndexInfo) {
100  return (int) (msgIndexInfo.record.time - record.time);
101  }
102 
103  @Override
104  public String toString() {
105  return record.toString();
106  }
107 }
聊天消息全文检索结果记录
NIM消息实体数据结构。 第三方APP不要调用设置类接口,调用之后不会被持久化
Definition: IMMessage.java:10
MsgIndexRecord(NIMIndexRecord record, String query)