Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

59
LINES

< > BotCompany Repo | #1028975 // Instant Full-Text Snippet Search v2 [using word index, seems OK]

JavaX source code (Dynamic Module) [tags: use-pretranspiled] - run with: Stefan's OS

Uses 911K of libraries. Click here for Pure Java version (8412L/42K).

!7

sclass SearchResult {
  S snippetID;
  S title;
  int occurrences;
  
  sS _fieldOrder = "snippetID title occurrences";
}

cmodule FullTextSnippetSearch > DynTableWithInput2<SearchResult> {
  switchable int maxResults = 1000;
  transient S status;
  
  JComponent mainComponent() {
    ret northAndCenterWithMargin(dm_rightAlignedLabel status(), super.mainComponent());
  }
  
  start {
    dontPersist();
  }
  
  void calc {
    S query = upper(input);
    
    S index = dm_require("#1028972/SnippetsWordIndex");
    Cl<S> 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<SearchResult> 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);
        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);
    setField(status := empty(query) ? " " : "Found " + addPlusToCount(maxResults, l(out), nSnippets(out) + " in " + formatDouble(nanoSecondsToMilliseconds(nanos), 3) + " ms"));
    setList(out);
  }
}

Author comment

Began life as a copy of #1028948

download  show line numbers  debug dex  old transpilations   

Travelled to 7 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv

No comments. add comment

Snippet ID: #1028975
Snippet name: Instant Full-Text Snippet Search v2 [using word index, seems OK]
Eternal ID of this version: #1028975/8
Text MD5: 9ae02108b0ced589e535fb4793ed1ccd
Transpilation MD5: 035eb387428410c96dbec5f19ae7878c
Author: stefan
Category: javax
Type: JavaX source code (Dynamic Module)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2020-07-15 02:05:05
Source code size: 1837 bytes / 59 lines
Pitched / IR pitched: No / No
Views / Downloads: 184 / 3326
Version history: 7 change(s)
Referenced in: #1029009 - Instant Full-Text Snippet Search v3 [using double word index, skips texts > 100k chars]