Warning: session_start(): open(/var/lib/php/sessions/sess_dp6a72tbmsj2igb0e6bfjhr1b1, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
sclass SearchResult {
S snippetID;
S title;
int occurrences;
sS _fieldOrder = "snippetID title occurrences";
}
cmodule FullTextSnippetSearch > DynTableWithInput2 {
switchable int maxResults = 1000;
switchable int maxTextLength = 100000;
transient S status;
JComponent mainComponent() {
ret northAndCenterWithMargin(dm_rightAlignedLabel status(), super.mainComponent());
}
start {
dontPersist();
thread { warmUp(); }
}
void calc {
setField(out := search(input, true));
}
void warmUp enter {
benchFor5Seconds(r { hijackPrint(r { search("this is cool", false) }) });
}
L search(S input, bool setStatus) {
S query = upper(input);
S index = dm_require("#1029008/SnippetsDoubleWordIndex");
Cl preSnippetIDs = cast dm_call(index, 'snippetsContainingTextIC_preSearch, query);
print("Pre-search: " + (preSnippetIDs == null ? "-" : lstr(preSnippetIDs)));
S mod = dm_require("#1028945/CacheAllSnippets");
SS data = cast dm_rcall getData(mod);
SS titles = cast dm_rcall getTitles(mod);
new L out;
if (preSnippetIDs == null) preSnippetIDs = keys(data);
long nanos = 0;
if (nempty(query)) {
nanos = nanoTime();
fOr ping (S snippetID : preSnippetIDs) {
S text = data.get(snippetID);
continue if l(text) > maxTextLength;
S title = titles.get(snippetID);
int n =
countOccurrencesIC(title, query)
+ countOccurrences_optimizedForZero(text, query);
if (n > 0) {
new SearchResult r;
r.snippetID = snippetID;
r.title = title;
r.occurrences = n;
out.add(r);
if (l(out) >= maxResults) break;
}
}
nanos = max(nanoTime()-nanos, 0);
}
sortInPlaceByCalculatedFieldDesc(out, r -> r.occurrences);
if (setStatus)
setField(status := empty(query) ? " " : "Found " + addPlusToCount(maxResults, l(out), nSnippets(out) + " in " + formatDouble(nanoSecondsToMilliseconds(nanos), 3) + " ms"));
ret out;
}
}