@danielsimonjr/memoryjs 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/README.md +385 -113
  2. package/README.md.backup-1768084780988 +266 -0
  3. package/dist/index.cjs +17364 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +12371 -0
  6. package/dist/index.d.ts +12367 -11
  7. package/dist/index.js +17102 -19
  8. package/dist/index.js.map +1 -1
  9. package/dist/workers/levenshteinWorker.cjs +102 -0
  10. package/dist/workers/levenshteinWorker.cjs.map +1 -0
  11. package/dist/workers/levenshteinWorker.js +57 -91
  12. package/dist/workers/levenshteinWorker.js.map +1 -1
  13. package/package.json +12 -6
  14. package/dist/core/EntityManager.d.ts +0 -268
  15. package/dist/core/EntityManager.d.ts.map +0 -1
  16. package/dist/core/EntityManager.js +0 -512
  17. package/dist/core/EntityManager.js.map +0 -1
  18. package/dist/core/GraphEventEmitter.d.ts +0 -202
  19. package/dist/core/GraphEventEmitter.d.ts.map +0 -1
  20. package/dist/core/GraphEventEmitter.js +0 -347
  21. package/dist/core/GraphEventEmitter.js.map +0 -1
  22. package/dist/core/GraphStorage.d.ts +0 -395
  23. package/dist/core/GraphStorage.d.ts.map +0 -1
  24. package/dist/core/GraphStorage.js +0 -786
  25. package/dist/core/GraphStorage.js.map +0 -1
  26. package/dist/core/GraphTraversal.d.ts +0 -141
  27. package/dist/core/GraphTraversal.d.ts.map +0 -1
  28. package/dist/core/GraphTraversal.js +0 -574
  29. package/dist/core/GraphTraversal.js.map +0 -1
  30. package/dist/core/HierarchyManager.d.ts +0 -111
  31. package/dist/core/HierarchyManager.d.ts.map +0 -1
  32. package/dist/core/HierarchyManager.js +0 -225
  33. package/dist/core/HierarchyManager.js.map +0 -1
  34. package/dist/core/ManagerContext.d.ts +0 -76
  35. package/dist/core/ManagerContext.d.ts.map +0 -1
  36. package/dist/core/ManagerContext.js +0 -129
  37. package/dist/core/ManagerContext.js.map +0 -1
  38. package/dist/core/ObservationManager.d.ts +0 -85
  39. package/dist/core/ObservationManager.d.ts.map +0 -1
  40. package/dist/core/ObservationManager.js +0 -124
  41. package/dist/core/ObservationManager.js.map +0 -1
  42. package/dist/core/RelationManager.d.ts +0 -131
  43. package/dist/core/RelationManager.d.ts.map +0 -1
  44. package/dist/core/RelationManager.js +0 -212
  45. package/dist/core/RelationManager.js.map +0 -1
  46. package/dist/core/SQLiteStorage.d.ts +0 -354
  47. package/dist/core/SQLiteStorage.d.ts.map +0 -1
  48. package/dist/core/SQLiteStorage.js +0 -919
  49. package/dist/core/SQLiteStorage.js.map +0 -1
  50. package/dist/core/StorageFactory.d.ts +0 -45
  51. package/dist/core/StorageFactory.d.ts.map +0 -1
  52. package/dist/core/StorageFactory.js +0 -65
  53. package/dist/core/StorageFactory.js.map +0 -1
  54. package/dist/core/TransactionManager.d.ts +0 -464
  55. package/dist/core/TransactionManager.d.ts.map +0 -1
  56. package/dist/core/TransactionManager.js +0 -869
  57. package/dist/core/TransactionManager.js.map +0 -1
  58. package/dist/core/index.d.ts +0 -17
  59. package/dist/core/index.d.ts.map +0 -1
  60. package/dist/core/index.js +0 -20
  61. package/dist/core/index.js.map +0 -1
  62. package/dist/features/AnalyticsManager.d.ts +0 -44
  63. package/dist/features/AnalyticsManager.d.ts.map +0 -1
  64. package/dist/features/AnalyticsManager.js +0 -224
  65. package/dist/features/AnalyticsManager.js.map +0 -1
  66. package/dist/features/ArchiveManager.d.ts +0 -133
  67. package/dist/features/ArchiveManager.d.ts.map +0 -1
  68. package/dist/features/ArchiveManager.js +0 -282
  69. package/dist/features/ArchiveManager.js.map +0 -1
  70. package/dist/features/CompressionManager.d.ts +0 -119
  71. package/dist/features/CompressionManager.d.ts.map +0 -1
  72. package/dist/features/CompressionManager.js +0 -470
  73. package/dist/features/CompressionManager.js.map +0 -1
  74. package/dist/features/IOManager.d.ts +0 -225
  75. package/dist/features/IOManager.d.ts.map +0 -1
  76. package/dist/features/IOManager.js +0 -1093
  77. package/dist/features/IOManager.js.map +0 -1
  78. package/dist/features/KeywordExtractor.d.ts +0 -61
  79. package/dist/features/KeywordExtractor.d.ts.map +0 -1
  80. package/dist/features/KeywordExtractor.js +0 -127
  81. package/dist/features/KeywordExtractor.js.map +0 -1
  82. package/dist/features/ObservationNormalizer.d.ts +0 -90
  83. package/dist/features/ObservationNormalizer.d.ts.map +0 -1
  84. package/dist/features/ObservationNormalizer.js +0 -194
  85. package/dist/features/ObservationNormalizer.js.map +0 -1
  86. package/dist/features/StreamingExporter.d.ts +0 -128
  87. package/dist/features/StreamingExporter.d.ts.map +0 -1
  88. package/dist/features/StreamingExporter.js +0 -212
  89. package/dist/features/StreamingExporter.js.map +0 -1
  90. package/dist/features/TagManager.d.ts +0 -147
  91. package/dist/features/TagManager.d.ts.map +0 -1
  92. package/dist/features/TagManager.js +0 -211
  93. package/dist/features/TagManager.js.map +0 -1
  94. package/dist/features/index.d.ts +0 -14
  95. package/dist/features/index.d.ts.map +0 -1
  96. package/dist/features/index.js +0 -15
  97. package/dist/features/index.js.map +0 -1
  98. package/dist/index.d.ts.map +0 -1
  99. package/dist/search/BM25Search.d.ts +0 -148
  100. package/dist/search/BM25Search.d.ts.map +0 -1
  101. package/dist/search/BM25Search.js +0 -340
  102. package/dist/search/BM25Search.js.map +0 -1
  103. package/dist/search/BasicSearch.d.ts +0 -51
  104. package/dist/search/BasicSearch.d.ts.map +0 -1
  105. package/dist/search/BasicSearch.js +0 -138
  106. package/dist/search/BasicSearch.js.map +0 -1
  107. package/dist/search/BooleanSearch.d.ts +0 -98
  108. package/dist/search/BooleanSearch.d.ts.map +0 -1
  109. package/dist/search/BooleanSearch.js +0 -431
  110. package/dist/search/BooleanSearch.js.map +0 -1
  111. package/dist/search/EarlyTerminationManager.d.ts +0 -140
  112. package/dist/search/EarlyTerminationManager.d.ts.map +0 -1
  113. package/dist/search/EarlyTerminationManager.js +0 -280
  114. package/dist/search/EarlyTerminationManager.js.map +0 -1
  115. package/dist/search/EmbeddingCache.d.ts +0 -175
  116. package/dist/search/EmbeddingCache.d.ts.map +0 -1
  117. package/dist/search/EmbeddingCache.js +0 -247
  118. package/dist/search/EmbeddingCache.js.map +0 -1
  119. package/dist/search/EmbeddingService.d.ts +0 -277
  120. package/dist/search/EmbeddingService.d.ts.map +0 -1
  121. package/dist/search/EmbeddingService.js +0 -531
  122. package/dist/search/EmbeddingService.js.map +0 -1
  123. package/dist/search/FuzzySearch.d.ts +0 -118
  124. package/dist/search/FuzzySearch.d.ts.map +0 -1
  125. package/dist/search/FuzzySearch.js +0 -313
  126. package/dist/search/FuzzySearch.js.map +0 -1
  127. package/dist/search/HybridScorer.d.ts +0 -181
  128. package/dist/search/HybridScorer.d.ts.map +0 -1
  129. package/dist/search/HybridScorer.js +0 -258
  130. package/dist/search/HybridScorer.js.map +0 -1
  131. package/dist/search/HybridSearchManager.d.ts +0 -80
  132. package/dist/search/HybridSearchManager.d.ts.map +0 -1
  133. package/dist/search/HybridSearchManager.js +0 -188
  134. package/dist/search/HybridSearchManager.js.map +0 -1
  135. package/dist/search/IncrementalIndexer.d.ts +0 -201
  136. package/dist/search/IncrementalIndexer.d.ts.map +0 -1
  137. package/dist/search/IncrementalIndexer.js +0 -343
  138. package/dist/search/IncrementalIndexer.js.map +0 -1
  139. package/dist/search/OptimizedInvertedIndex.d.ts +0 -163
  140. package/dist/search/OptimizedInvertedIndex.d.ts.map +0 -1
  141. package/dist/search/OptimizedInvertedIndex.js +0 -359
  142. package/dist/search/OptimizedInvertedIndex.js.map +0 -1
  143. package/dist/search/ParallelSearchExecutor.d.ts +0 -172
  144. package/dist/search/ParallelSearchExecutor.d.ts.map +0 -1
  145. package/dist/search/ParallelSearchExecutor.js +0 -310
  146. package/dist/search/ParallelSearchExecutor.js.map +0 -1
  147. package/dist/search/QuantizedVectorStore.d.ts +0 -171
  148. package/dist/search/QuantizedVectorStore.d.ts.map +0 -1
  149. package/dist/search/QuantizedVectorStore.js +0 -308
  150. package/dist/search/QuantizedVectorStore.js.map +0 -1
  151. package/dist/search/QueryAnalyzer.d.ts +0 -76
  152. package/dist/search/QueryAnalyzer.d.ts.map +0 -1
  153. package/dist/search/QueryAnalyzer.js +0 -228
  154. package/dist/search/QueryAnalyzer.js.map +0 -1
  155. package/dist/search/QueryCostEstimator.d.ts +0 -244
  156. package/dist/search/QueryCostEstimator.d.ts.map +0 -1
  157. package/dist/search/QueryCostEstimator.js +0 -653
  158. package/dist/search/QueryCostEstimator.js.map +0 -1
  159. package/dist/search/QueryPlanCache.d.ts +0 -220
  160. package/dist/search/QueryPlanCache.d.ts.map +0 -1
  161. package/dist/search/QueryPlanCache.js +0 -380
  162. package/dist/search/QueryPlanCache.js.map +0 -1
  163. package/dist/search/QueryPlanner.d.ts +0 -58
  164. package/dist/search/QueryPlanner.d.ts.map +0 -1
  165. package/dist/search/QueryPlanner.js +0 -138
  166. package/dist/search/QueryPlanner.js.map +0 -1
  167. package/dist/search/RankedSearch.d.ts +0 -71
  168. package/dist/search/RankedSearch.d.ts.map +0 -1
  169. package/dist/search/RankedSearch.js +0 -239
  170. package/dist/search/RankedSearch.js.map +0 -1
  171. package/dist/search/ReflectionManager.d.ts +0 -120
  172. package/dist/search/ReflectionManager.d.ts.map +0 -1
  173. package/dist/search/ReflectionManager.js +0 -232
  174. package/dist/search/ReflectionManager.js.map +0 -1
  175. package/dist/search/SavedSearchManager.d.ts +0 -79
  176. package/dist/search/SavedSearchManager.d.ts.map +0 -1
  177. package/dist/search/SavedSearchManager.js +0 -147
  178. package/dist/search/SavedSearchManager.js.map +0 -1
  179. package/dist/search/SearchFilterChain.d.ts +0 -120
  180. package/dist/search/SearchFilterChain.d.ts.map +0 -1
  181. package/dist/search/SearchFilterChain.js +0 -186
  182. package/dist/search/SearchFilterChain.js.map +0 -1
  183. package/dist/search/SearchManager.d.ts +0 -326
  184. package/dist/search/SearchManager.d.ts.map +0 -1
  185. package/dist/search/SearchManager.js +0 -454
  186. package/dist/search/SearchManager.js.map +0 -1
  187. package/dist/search/SearchSuggestions.d.ts +0 -27
  188. package/dist/search/SearchSuggestions.d.ts.map +0 -1
  189. package/dist/search/SearchSuggestions.js +0 -58
  190. package/dist/search/SearchSuggestions.js.map +0 -1
  191. package/dist/search/SemanticSearch.d.ts +0 -149
  192. package/dist/search/SemanticSearch.d.ts.map +0 -1
  193. package/dist/search/SemanticSearch.js +0 -324
  194. package/dist/search/SemanticSearch.js.map +0 -1
  195. package/dist/search/SymbolicSearch.d.ts +0 -61
  196. package/dist/search/SymbolicSearch.d.ts.map +0 -1
  197. package/dist/search/SymbolicSearch.js +0 -164
  198. package/dist/search/SymbolicSearch.js.map +0 -1
  199. package/dist/search/TFIDFEventSync.d.ts +0 -85
  200. package/dist/search/TFIDFEventSync.d.ts.map +0 -1
  201. package/dist/search/TFIDFEventSync.js +0 -134
  202. package/dist/search/TFIDFEventSync.js.map +0 -1
  203. package/dist/search/TFIDFIndexManager.d.ts +0 -151
  204. package/dist/search/TFIDFIndexManager.d.ts.map +0 -1
  205. package/dist/search/TFIDFIndexManager.js +0 -433
  206. package/dist/search/TFIDFIndexManager.js.map +0 -1
  207. package/dist/search/VectorStore.d.ts +0 -235
  208. package/dist/search/VectorStore.d.ts.map +0 -1
  209. package/dist/search/VectorStore.js +0 -312
  210. package/dist/search/VectorStore.js.map +0 -1
  211. package/dist/search/index.d.ts +0 -35
  212. package/dist/search/index.d.ts.map +0 -1
  213. package/dist/search/index.js +0 -53
  214. package/dist/search/index.js.map +0 -1
  215. package/dist/types/index.d.ts +0 -13
  216. package/dist/types/index.d.ts.map +0 -1
  217. package/dist/types/index.js +0 -13
  218. package/dist/types/index.js.map +0 -1
  219. package/dist/types/types.d.ts +0 -1811
  220. package/dist/types/types.d.ts.map +0 -1
  221. package/dist/types/types.js +0 -10
  222. package/dist/types/types.js.map +0 -1
  223. package/dist/utils/BatchProcessor.d.ts +0 -271
  224. package/dist/utils/BatchProcessor.d.ts.map +0 -1
  225. package/dist/utils/BatchProcessor.js +0 -377
  226. package/dist/utils/BatchProcessor.js.map +0 -1
  227. package/dist/utils/MemoryMonitor.d.ts +0 -176
  228. package/dist/utils/MemoryMonitor.d.ts.map +0 -1
  229. package/dist/utils/MemoryMonitor.js +0 -306
  230. package/dist/utils/MemoryMonitor.js.map +0 -1
  231. package/dist/utils/WorkerPoolManager.d.ts +0 -233
  232. package/dist/utils/WorkerPoolManager.d.ts.map +0 -1
  233. package/dist/utils/WorkerPoolManager.js +0 -421
  234. package/dist/utils/WorkerPoolManager.js.map +0 -1
  235. package/dist/utils/compressedCache.d.ts +0 -221
  236. package/dist/utils/compressedCache.d.ts.map +0 -1
  237. package/dist/utils/compressedCache.js +0 -349
  238. package/dist/utils/compressedCache.js.map +0 -1
  239. package/dist/utils/compressionUtil.d.ts +0 -214
  240. package/dist/utils/compressionUtil.d.ts.map +0 -1
  241. package/dist/utils/compressionUtil.js +0 -248
  242. package/dist/utils/compressionUtil.js.map +0 -1
  243. package/dist/utils/constants.d.ts +0 -245
  244. package/dist/utils/constants.d.ts.map +0 -1
  245. package/dist/utils/constants.js +0 -253
  246. package/dist/utils/constants.js.map +0 -1
  247. package/dist/utils/entityUtils.d.ts +0 -379
  248. package/dist/utils/entityUtils.d.ts.map +0 -1
  249. package/dist/utils/entityUtils.js +0 -649
  250. package/dist/utils/entityUtils.js.map +0 -1
  251. package/dist/utils/errors.d.ts +0 -95
  252. package/dist/utils/errors.d.ts.map +0 -1
  253. package/dist/utils/errors.js +0 -146
  254. package/dist/utils/errors.js.map +0 -1
  255. package/dist/utils/formatters.d.ts +0 -145
  256. package/dist/utils/formatters.d.ts.map +0 -1
  257. package/dist/utils/formatters.js +0 -133
  258. package/dist/utils/formatters.js.map +0 -1
  259. package/dist/utils/index.d.ts +0 -26
  260. package/dist/utils/index.d.ts.map +0 -1
  261. package/dist/utils/index.js +0 -88
  262. package/dist/utils/index.js.map +0 -1
  263. package/dist/utils/indexes.d.ts +0 -270
  264. package/dist/utils/indexes.d.ts.map +0 -1
  265. package/dist/utils/indexes.js +0 -527
  266. package/dist/utils/indexes.js.map +0 -1
  267. package/dist/utils/logger.d.ts +0 -31
  268. package/dist/utils/logger.d.ts.map +0 -1
  269. package/dist/utils/logger.js +0 -41
  270. package/dist/utils/logger.js.map +0 -1
  271. package/dist/utils/operationUtils.d.ts +0 -124
  272. package/dist/utils/operationUtils.d.ts.map +0 -1
  273. package/dist/utils/operationUtils.js +0 -176
  274. package/dist/utils/operationUtils.js.map +0 -1
  275. package/dist/utils/parallelUtils.d.ts +0 -76
  276. package/dist/utils/parallelUtils.d.ts.map +0 -1
  277. package/dist/utils/parallelUtils.js +0 -192
  278. package/dist/utils/parallelUtils.js.map +0 -1
  279. package/dist/utils/schemas.d.ts +0 -556
  280. package/dist/utils/schemas.d.ts.map +0 -1
  281. package/dist/utils/schemas.js +0 -485
  282. package/dist/utils/schemas.js.map +0 -1
  283. package/dist/utils/searchAlgorithms.d.ts +0 -99
  284. package/dist/utils/searchAlgorithms.d.ts.map +0 -1
  285. package/dist/utils/searchAlgorithms.js +0 -168
  286. package/dist/utils/searchAlgorithms.js.map +0 -1
  287. package/dist/utils/searchCache.d.ts +0 -108
  288. package/dist/utils/searchCache.d.ts.map +0 -1
  289. package/dist/utils/searchCache.js +0 -210
  290. package/dist/utils/searchCache.js.map +0 -1
  291. package/dist/utils/taskScheduler.d.ts +0 -294
  292. package/dist/utils/taskScheduler.d.ts.map +0 -1
  293. package/dist/utils/taskScheduler.js +0 -487
  294. package/dist/utils/taskScheduler.js.map +0 -1
  295. package/dist/workers/index.d.ts +0 -12
  296. package/dist/workers/index.d.ts.map +0 -1
  297. package/dist/workers/index.js +0 -10
  298. package/dist/workers/index.js.map +0 -1
  299. package/dist/workers/levenshteinWorker.d.ts +0 -60
  300. package/dist/workers/levenshteinWorker.d.ts.map +0 -1
@@ -1,163 +0,0 @@
1
- /**
2
- * Optimized Inverted Index
3
- *
4
- * Memory-efficient inverted index using integer IDs and Uint32Array
5
- * for fast multi-term intersection queries.
6
- *
7
- * Phase 12 Sprint 3: Search Algorithm Optimization
8
- *
9
- * @module search/OptimizedInvertedIndex
10
- */
11
- /**
12
- * Statistics about memory usage.
13
- */
14
- export interface IndexMemoryUsage {
15
- /** Total bytes used by posting lists */
16
- postingListBytes: number;
17
- /** Total bytes used by ID map */
18
- idMapBytes: number;
19
- /** Total bytes used by term index */
20
- termIndexBytes: number;
21
- /** Total estimated memory usage in bytes */
22
- totalBytes: number;
23
- /** Number of unique terms */
24
- termCount: number;
25
- /** Number of documents indexed */
26
- documentCount: number;
27
- }
28
- /**
29
- * Result from a posting list lookup.
30
- */
31
- export interface PostingListResult {
32
- /** Term that was looked up */
33
- term: string;
34
- /** Document IDs containing the term (sorted) */
35
- docIds: Uint32Array;
36
- }
37
- /**
38
- * Optimized Inverted Index using integer document IDs.
39
- *
40
- * Memory Optimizations:
41
- * 1. Uses integer IDs instead of string entity names
42
- * 2. Stores posting lists as Uint32Array (4 bytes per ID vs ~20+ bytes per string)
43
- * 3. Maintains sorted posting lists for efficient intersection
44
- *
45
- * Performance Optimizations:
46
- * 1. Sorted array intersection is O(n+m) where n,m are posting list lengths
47
- * 2. Early termination when one list is exhausted
48
- * 3. Binary search available for unbalanced list sizes
49
- *
50
- * @example
51
- * ```typescript
52
- * const index = new OptimizedInvertedIndex();
53
- * index.addDocument('entity1', ['machine', 'learning', 'ai']);
54
- * index.addDocument('entity2', ['deep', 'learning', 'neural']);
55
- *
56
- * // Find documents containing both 'machine' AND 'learning'
57
- * const results = index.intersect(['machine', 'learning']);
58
- * console.log(results); // ['entity1']
59
- * ```
60
- */
61
- export declare class OptimizedInvertedIndex {
62
- /** Map from entity name to integer ID */
63
- private entityToId;
64
- /** Map from integer ID to entity name */
65
- private idToEntity;
66
- /** Next available ID */
67
- private nextId;
68
- /** Inverted index: term -> sorted array of document IDs */
69
- private postingLists;
70
- /** Temporary posting lists (before finalization) */
71
- private tempPostingLists;
72
- /** Whether the index is finalized (posting lists converted to Uint32Array) */
73
- private finalized;
74
- /**
75
- * Add a document to the index.
76
- *
77
- * @param entityName - Unique document identifier
78
- * @param terms - Array of terms in the document (should be lowercase)
79
- */
80
- addDocument(entityName: string, terms: string[]): void;
81
- /**
82
- * Remove a document from the index.
83
- *
84
- * @param entityName - Document to remove
85
- * @returns True if document was found and removed
86
- */
87
- removeDocument(entityName: string): boolean;
88
- /**
89
- * Finalize the index by converting posting lists to Uint32Array.
90
- *
91
- * This should be called after bulk indexing for optimal memory usage.
92
- * The index can still be updated after finalization, but it will
93
- * temporarily use more memory during updates.
94
- */
95
- finalize(): void;
96
- /**
97
- * Convert finalized index back to mutable format.
98
- */
99
- private unfinalize;
100
- /**
101
- * Get posting list for a term.
102
- *
103
- * @param term - Term to look up
104
- * @returns Posting list result or null if term not found
105
- */
106
- getPostingList(term: string): PostingListResult | null;
107
- /**
108
- * Perform intersection of posting lists for multiple terms.
109
- *
110
- * Returns entity names that contain ALL specified terms.
111
- *
112
- * @param terms - Array of terms to intersect
113
- * @returns Array of entity names containing all terms
114
- */
115
- intersect(terms: string[]): string[];
116
- /**
117
- * Perform union of posting lists for multiple terms.
118
- *
119
- * Returns entity names that contain ANY of the specified terms.
120
- *
121
- * @param terms - Array of terms to union
122
- * @returns Array of entity names containing any term
123
- */
124
- union(terms: string[]): string[];
125
- /**
126
- * Get entities containing a single term.
127
- *
128
- * @param term - Term to search for
129
- * @returns Array of entity names containing the term
130
- */
131
- search(term: string): string[];
132
- /**
133
- * Intersect two sorted Uint32Arrays.
134
- *
135
- * Uses merge-style intersection which is O(n+m).
136
- */
137
- private intersectTwo;
138
- /**
139
- * Get memory usage statistics.
140
- */
141
- getMemoryUsage(): IndexMemoryUsage;
142
- /**
143
- * Clear the entire index.
144
- */
145
- clear(): void;
146
- /**
147
- * Get the number of documents in the index.
148
- */
149
- get documentCount(): number;
150
- /**
151
- * Get the number of unique terms in the index.
152
- */
153
- get termCount(): number;
154
- /**
155
- * Check if an entity is indexed.
156
- */
157
- hasDocument(entityName: string): boolean;
158
- /**
159
- * Check if a term exists in the index.
160
- */
161
- hasTerm(term: string): boolean;
162
- }
163
- //# sourceMappingURL=OptimizedInvertedIndex.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OptimizedInvertedIndex.d.ts","sourceRoot":"","sources":["../../src/search/OptimizedInvertedIndex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wCAAwC;IACxC,gBAAgB,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,sBAAsB;IACjC,yCAAyC;IACzC,OAAO,CAAC,UAAU,CAAkC;IAEpD,yCAAyC;IACzC,OAAO,CAAC,UAAU,CAAkC;IAEpD,wBAAwB;IACxB,OAAO,CAAC,MAAM,CAAa;IAE3B,2DAA2D;IAC3D,OAAO,CAAC,YAAY,CAAuC;IAE3D,oDAAoD;IACpD,OAAO,CAAC,gBAAgB,CAAoC;IAE5D,8EAA8E;IAC9E,OAAO,CAAC,SAAS,CAAkB;IAEnC;;;;;OAKG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAiCtD;;;;;OAKG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IA6B3C;;;;;;OAMG;IACH,QAAQ,IAAI,IAAI;IAiBhB;;OAEG;IACH,OAAO,CAAC,UAAU;IAalB;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IActD;;;;;;;OAOG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAqCpC;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAyBhC;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAY9B;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAoBpB;;OAEG;IACH,cAAc,IAAI,gBAAgB;IAwClC;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAItB;IAED;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAIxC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAK/B"}
@@ -1,359 +0,0 @@
1
- /**
2
- * Optimized Inverted Index
3
- *
4
- * Memory-efficient inverted index using integer IDs and Uint32Array
5
- * for fast multi-term intersection queries.
6
- *
7
- * Phase 12 Sprint 3: Search Algorithm Optimization
8
- *
9
- * @module search/OptimizedInvertedIndex
10
- */
11
- /**
12
- * Optimized Inverted Index using integer document IDs.
13
- *
14
- * Memory Optimizations:
15
- * 1. Uses integer IDs instead of string entity names
16
- * 2. Stores posting lists as Uint32Array (4 bytes per ID vs ~20+ bytes per string)
17
- * 3. Maintains sorted posting lists for efficient intersection
18
- *
19
- * Performance Optimizations:
20
- * 1. Sorted array intersection is O(n+m) where n,m are posting list lengths
21
- * 2. Early termination when one list is exhausted
22
- * 3. Binary search available for unbalanced list sizes
23
- *
24
- * @example
25
- * ```typescript
26
- * const index = new OptimizedInvertedIndex();
27
- * index.addDocument('entity1', ['machine', 'learning', 'ai']);
28
- * index.addDocument('entity2', ['deep', 'learning', 'neural']);
29
- *
30
- * // Find documents containing both 'machine' AND 'learning'
31
- * const results = index.intersect(['machine', 'learning']);
32
- * console.log(results); // ['entity1']
33
- * ```
34
- */
35
- export class OptimizedInvertedIndex {
36
- /** Map from entity name to integer ID */
37
- entityToId = new Map();
38
- /** Map from integer ID to entity name */
39
- idToEntity = new Map();
40
- /** Next available ID */
41
- nextId = 0;
42
- /** Inverted index: term -> sorted array of document IDs */
43
- postingLists = new Map();
44
- /** Temporary posting lists (before finalization) */
45
- tempPostingLists = new Map();
46
- /** Whether the index is finalized (posting lists converted to Uint32Array) */
47
- finalized = false;
48
- /**
49
- * Add a document to the index.
50
- *
51
- * @param entityName - Unique document identifier
52
- * @param terms - Array of terms in the document (should be lowercase)
53
- */
54
- addDocument(entityName, terms) {
55
- // Unfinalize if already finalized (allows incremental updates)
56
- if (this.finalized) {
57
- this.unfinalize();
58
- }
59
- // Get or assign document ID
60
- let docId = this.entityToId.get(entityName);
61
- if (docId === undefined) {
62
- docId = this.nextId++;
63
- this.entityToId.set(entityName, docId);
64
- this.idToEntity.set(docId, entityName);
65
- }
66
- // Add unique terms to posting lists
67
- const seenTerms = new Set();
68
- for (const term of terms) {
69
- if (seenTerms.has(term))
70
- continue;
71
- seenTerms.add(term);
72
- let postingList = this.tempPostingLists.get(term);
73
- if (!postingList) {
74
- postingList = [];
75
- this.tempPostingLists.set(term, postingList);
76
- }
77
- // Only add if not already present (maintains sorted order if added in order)
78
- if (postingList.length === 0 || postingList[postingList.length - 1] !== docId) {
79
- postingList.push(docId);
80
- }
81
- }
82
- }
83
- /**
84
- * Remove a document from the index.
85
- *
86
- * @param entityName - Document to remove
87
- * @returns True if document was found and removed
88
- */
89
- removeDocument(entityName) {
90
- const docId = this.entityToId.get(entityName);
91
- if (docId === undefined) {
92
- return false;
93
- }
94
- // Unfinalize if needed
95
- if (this.finalized) {
96
- this.unfinalize();
97
- }
98
- // Remove from all posting lists
99
- for (const [term, postingList] of this.tempPostingLists) {
100
- const idx = postingList.indexOf(docId);
101
- if (idx !== -1) {
102
- postingList.splice(idx, 1);
103
- if (postingList.length === 0) {
104
- this.tempPostingLists.delete(term);
105
- }
106
- }
107
- }
108
- // Remove ID mappings
109
- this.entityToId.delete(entityName);
110
- this.idToEntity.delete(docId);
111
- return true;
112
- }
113
- /**
114
- * Finalize the index by converting posting lists to Uint32Array.
115
- *
116
- * This should be called after bulk indexing for optimal memory usage.
117
- * The index can still be updated after finalization, but it will
118
- * temporarily use more memory during updates.
119
- */
120
- finalize() {
121
- if (this.finalized)
122
- return;
123
- // Convert temp posting lists to Uint32Array and sort
124
- this.postingLists.clear();
125
- for (const [term, list] of this.tempPostingLists) {
126
- // Sort and convert to Uint32Array
127
- list.sort((a, b) => a - b);
128
- const arr = new Uint32Array(list);
129
- this.postingLists.set(term, arr);
130
- }
131
- // Clear temp posting lists to save memory
132
- this.tempPostingLists.clear();
133
- this.finalized = true;
134
- }
135
- /**
136
- * Convert finalized index back to mutable format.
137
- */
138
- unfinalize() {
139
- if (!this.finalized)
140
- return;
141
- // Convert Uint32Array back to regular arrays
142
- this.tempPostingLists.clear();
143
- for (const [term, arr] of this.postingLists) {
144
- this.tempPostingLists.set(term, Array.from(arr));
145
- }
146
- this.postingLists.clear();
147
- this.finalized = false;
148
- }
149
- /**
150
- * Get posting list for a term.
151
- *
152
- * @param term - Term to look up
153
- * @returns Posting list result or null if term not found
154
- */
155
- getPostingList(term) {
156
- if (this.finalized) {
157
- const arr = this.postingLists.get(term);
158
- if (!arr)
159
- return null;
160
- return { term, docIds: arr };
161
- }
162
- else {
163
- const list = this.tempPostingLists.get(term);
164
- if (!list)
165
- return null;
166
- // Sort and return as Uint32Array
167
- const sorted = list.slice().sort((a, b) => a - b);
168
- return { term, docIds: new Uint32Array(sorted) };
169
- }
170
- }
171
- /**
172
- * Perform intersection of posting lists for multiple terms.
173
- *
174
- * Returns entity names that contain ALL specified terms.
175
- *
176
- * @param terms - Array of terms to intersect
177
- * @returns Array of entity names containing all terms
178
- */
179
- intersect(terms) {
180
- if (terms.length === 0) {
181
- return [];
182
- }
183
- // Ensure finalized for optimal performance
184
- if (!this.finalized) {
185
- this.finalize();
186
- }
187
- // Get posting lists for all terms
188
- const postingLists = [];
189
- for (const term of terms) {
190
- const list = this.postingLists.get(term);
191
- if (!list || list.length === 0) {
192
- // If any term has no posting list, intersection is empty
193
- return [];
194
- }
195
- postingLists.push(list);
196
- }
197
- // Sort by length (smallest first for early termination)
198
- postingLists.sort((a, b) => a.length - b.length);
199
- // Perform multi-way sorted intersection
200
- let result = postingLists[0];
201
- for (let i = 1; i < postingLists.length; i++) {
202
- result = this.intersectTwo(result, postingLists[i]);
203
- if (result.length === 0) {
204
- return [];
205
- }
206
- }
207
- // Convert IDs back to entity names
208
- return Array.from(result).map(id => this.idToEntity.get(id));
209
- }
210
- /**
211
- * Perform union of posting lists for multiple terms.
212
- *
213
- * Returns entity names that contain ANY of the specified terms.
214
- *
215
- * @param terms - Array of terms to union
216
- * @returns Array of entity names containing any term
217
- */
218
- union(terms) {
219
- if (terms.length === 0) {
220
- return [];
221
- }
222
- // Ensure finalized for optimal performance
223
- if (!this.finalized) {
224
- this.finalize();
225
- }
226
- // Collect all unique document IDs
227
- const allIds = new Set();
228
- for (const term of terms) {
229
- const list = this.postingLists.get(term);
230
- if (list) {
231
- for (const id of list) {
232
- allIds.add(id);
233
- }
234
- }
235
- }
236
- // Convert IDs back to entity names
237
- return Array.from(allIds).map(id => this.idToEntity.get(id));
238
- }
239
- /**
240
- * Get entities containing a single term.
241
- *
242
- * @param term - Term to search for
243
- * @returns Array of entity names containing the term
244
- */
245
- search(term) {
246
- if (!this.finalized) {
247
- const list = this.tempPostingLists.get(term);
248
- if (!list)
249
- return [];
250
- return list.map(id => this.idToEntity.get(id));
251
- }
252
- const list = this.postingLists.get(term);
253
- if (!list)
254
- return [];
255
- return Array.from(list).map(id => this.idToEntity.get(id));
256
- }
257
- /**
258
- * Intersect two sorted Uint32Arrays.
259
- *
260
- * Uses merge-style intersection which is O(n+m).
261
- */
262
- intersectTwo(a, b) {
263
- const result = [];
264
- let i = 0;
265
- let j = 0;
266
- while (i < a.length && j < b.length) {
267
- if (a[i] === b[j]) {
268
- result.push(a[i]);
269
- i++;
270
- j++;
271
- }
272
- else if (a[i] < b[j]) {
273
- i++;
274
- }
275
- else {
276
- j++;
277
- }
278
- }
279
- return new Uint32Array(result);
280
- }
281
- /**
282
- * Get memory usage statistics.
283
- */
284
- getMemoryUsage() {
285
- let postingListBytes = 0;
286
- let termCount = 0;
287
- if (this.finalized) {
288
- for (const arr of this.postingLists.values()) {
289
- // Uint32Array uses 4 bytes per element
290
- postingListBytes += arr.byteLength;
291
- termCount++;
292
- }
293
- }
294
- else {
295
- for (const list of this.tempPostingLists.values()) {
296
- // Regular array uses 8 bytes per element (64-bit numbers in V8)
297
- // Plus array overhead
298
- postingListBytes += list.length * 8 + 32; // Approximate overhead
299
- termCount++;
300
- }
301
- }
302
- // Estimate ID map overhead
303
- // Map has ~100 bytes overhead + ~50 bytes per entry for string keys
304
- const idMapBytes = 100 +
305
- this.entityToId.size * 50 +
306
- this.idToEntity.size * 8; // number key is ~8 bytes
307
- // Estimate term index overhead
308
- // ~50 bytes per term entry (key + pointer)
309
- const termIndexBytes = termCount * 50;
310
- return {
311
- postingListBytes,
312
- idMapBytes,
313
- termIndexBytes,
314
- totalBytes: postingListBytes + idMapBytes + termIndexBytes,
315
- termCount,
316
- documentCount: this.entityToId.size,
317
- };
318
- }
319
- /**
320
- * Clear the entire index.
321
- */
322
- clear() {
323
- this.entityToId.clear();
324
- this.idToEntity.clear();
325
- this.postingLists.clear();
326
- this.tempPostingLists.clear();
327
- this.nextId = 0;
328
- this.finalized = false;
329
- }
330
- /**
331
- * Get the number of documents in the index.
332
- */
333
- get documentCount() {
334
- return this.entityToId.size;
335
- }
336
- /**
337
- * Get the number of unique terms in the index.
338
- */
339
- get termCount() {
340
- return this.finalized
341
- ? this.postingLists.size
342
- : this.tempPostingLists.size;
343
- }
344
- /**
345
- * Check if an entity is indexed.
346
- */
347
- hasDocument(entityName) {
348
- return this.entityToId.has(entityName);
349
- }
350
- /**
351
- * Check if a term exists in the index.
352
- */
353
- hasTerm(term) {
354
- return this.finalized
355
- ? this.postingLists.has(term)
356
- : this.tempPostingLists.has(term);
357
- }
358
- }
359
- //# sourceMappingURL=OptimizedInvertedIndex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OptimizedInvertedIndex.js","sourceRoot":"","sources":["../../src/search/OptimizedInvertedIndex.ts"],"names":[],"mappings":"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"}