Page MenuHomePhorge

D8899.1765293218.diff
No OneTemporary

Size
2 KB
Referenced Files
None
Subscribers
None

D8899.1765293218.diff

diff --git a/lib/shared/search-index.js b/lib/shared/search-index.js
--- a/lib/shared/search-index.js
+++ b/lib/shared/search-index.js
@@ -26,24 +26,28 @@
this.partialTextIndex = {};
}
+ addAllPrefixes(id: string, value: string): void {
+ if (this.fullTextIndex[value] === undefined) {
+ this.fullTextIndex[value] = new Set();
+ }
+ this.fullTextIndex[value].add(id);
+ let partialString = '';
+ for (let i = 0; i < value.length; i++) {
+ const char = value[i];
+ partialString += char;
+ // TODO probably should do some stopwords here
+ if (this.partialTextIndex[partialString] === undefined) {
+ this.partialTextIndex[partialString] = new Set();
+ }
+ this.partialTextIndex[partialString].add(id);
+ }
+ }
+
addEntry(id: string, rawText: string) {
const keywords = this.tokenize(rawText);
for (const keyword of keywords) {
const value = keyword.value.toLowerCase();
- if (this.fullTextIndex[value] === undefined) {
- this.fullTextIndex[value] = new Set();
- }
- this.fullTextIndex[value].add(id);
- let partialString = '';
- for (let i = 0; i < value.length; i++) {
- const char = value[i];
- partialString += char;
- // TODO probably should do some stopwords here
- if (this.partialTextIndex[partialString] === undefined) {
- this.partialTextIndex[partialString] = new Set();
- }
- this.partialTextIndex[partialString].add(id);
- }
+ this.addAllPrefixes(id, value);
}
}
diff --git a/lib/shared/sentence-prefix-search-index.js b/lib/shared/sentence-prefix-search-index.js
new file mode 100644
--- /dev/null
+++ b/lib/shared/sentence-prefix-search-index.js
@@ -0,0 +1,34 @@
+// @flow
+
+import Tokenizer from 'tokenize-text';
+
+import SearchIndex from './search-index.js';
+
+class SentencePrefixSearchIndex extends SearchIndex {
+ entries: Set<string>;
+
+ constructor() {
+ super();
+ this.tokenize = new Tokenizer().re(/\S+/);
+ this.entries = new Set();
+ }
+
+ addEntry(id: string, rawText: string) {
+ const keywords = this.tokenize(rawText);
+ for (const keyword of keywords) {
+ const value = rawText.slice(keyword.index).toLowerCase();
+ this.addAllPrefixes(id, value);
+ }
+ this.entries.add(id);
+ }
+
+ getSearchResults(query: string): string[] {
+ const transformedQuery = query.toLowerCase();
+ if (this.partialTextIndex[transformedQuery]) {
+ return Array.from(this.partialTextIndex[transformedQuery]);
+ }
+ return [];
+ }
+}
+
+export default SentencePrefixSearchIndex;

File Metadata

Mime Type
text/plain
Expires
Tue, Dec 9, 3:13 PM (2 h, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5854912
Default Alt Text
D8899.1765293218.diff (2 KB)

Event Timeline