diff options
| -rw-r--r-- | bucky/search/lexicon.js | 17 | ||||
| -rw-r--r-- | bucky/search/search.js | 2 | ||||
| -rw-r--r-- | bucky/util/middleware.js | 2 | ||||
| -rw-r--r-- | public/assets/css/bucky.css | 1 | ||||
| -rw-r--r-- | public/assets/js/lib/views/search/results.js | 6 | ||||
| -rw-r--r-- | views/pages/search.ejs | 4 |
6 files changed, 20 insertions, 12 deletions
diff --git a/bucky/search/lexicon.js b/bucky/search/lexicon.js index e6a9e84..2415e81 100644 --- a/bucky/search/lexicon.js +++ b/bucky/search/lexicon.js @@ -7,11 +7,13 @@ var db = require('../db') var search_db = bdb('search') var lexicon = {} +var lex_counts = {} var total = 0 module.exports = { build: build_index } function build_index() { + console.log("building index") parse_threads() .then(parse_comments) .then(parse_files) @@ -61,7 +63,7 @@ function parse_files() { } var underscoreRegexp = new RegExp('_', 'g') -var spaceRegexp = new RegExp('[^a-zA-Z]+', 'g') +var spaceRegexp = new RegExp('[^a-zA-Z0-9]+', 'g') function parse_terms (opt) { var thread = opt.thread @@ -80,13 +82,16 @@ function parse_terms (opt) { res.thread = res.thread || thread res.comment = res.comment || comment res.file = res.file || file - if (!comment || !file) { + // prioritize threads + if (!comment && !file) { res.strength += 2 } else { res.strength += 1 } count += 1 + lex_counts[term] = lex_counts[term] || 0 + lex_counts[term] += 1 }) return count || 0 } @@ -96,7 +101,7 @@ function lexicon_store () { console.log('writing db...') Object.keys(lexicon).forEach( (term) => { if (STOPWORDS.has(term)) return - var serialized = serialize_matches(lexicon[term]); + var serialized = serialize_matches(term); if (! serialized) return; if ((put_total % 5000) === 0) console.log(put_total + '...') put_total += 1 @@ -105,7 +110,9 @@ function lexicon_store () { search_db.put(term, serialized) }) } -function serialize_matches (matches) { +function serialize_matches (term) { + var matches = lexicon[term] + var idf = Math.log(total / lex_counts[term]) var serialized_matches = []; Object.values(matches).forEach( (match) => { if (!match) return @@ -113,7 +120,7 @@ function serialize_matches (matches) { match.thread, match.comment, match.file, - match.strength + match.strength * idf ].join(' ') if (s) serialized_matches.push(s) }) diff --git a/bucky/search/search.js b/bucky/search/search.js index 1236a4c..1a56f53 100644 --- a/bucky/search/search.js +++ b/bucky/search/search.js @@ -49,7 +49,7 @@ function search (query, start, limit) { score.thread = score.thread || parseInt(result.thread) score.comment = score.comment || parseInt(result.comment) score.file = score.file || parseInt(result.file) - score.strength += result.strength + score.strength += parseFloat(result.strength) score.count += 1 }) }) diff --git a/bucky/util/middleware.js b/bucky/util/middleware.js index 08935e1..20ec323 100644 --- a/bucky/util/middleware.js +++ b/bucky/util/middleware.js @@ -12,8 +12,6 @@ var middleware = module.exports = { res.locals.csrfToken = req.csrfToken() res.locals.title = "bucky" res.locals.env = process.env.NODE_ENV - console.log(res.locals.env) - if (req.isAuthenticated()) { res.locals.show_header = true } diff --git a/public/assets/css/bucky.css b/public/assets/css/bucky.css index 1268aa3..03cb81d 100644 --- a/public/assets/css/bucky.css +++ b/public/assets/css/bucky.css @@ -837,6 +837,7 @@ pre br { } .login header .search_form, .signup header .search_form, +.search header .search_form, .index header .search_form { display: none; } diff --git a/public/assets/js/lib/views/search/results.js b/public/assets/js/lib/views/search/results.js index 516f10d..0af68ba 100644 --- a/public/assets/js/lib/views/search/results.js +++ b/public/assets/js/lib/views/search/results.js @@ -27,7 +27,8 @@ var SearchResults = View.extend({ $("title").html('bucky search "' + sanitize(query) + '"') $("[name=query]").val(query) this.$(".query").html(query) - this.$(".total").html(parseInt(res.meta.total)) + var total = parseInt(res.meta.total) + this.$(".total").html(total + " result" + courtesy_s(total)) var next_page = { query: res.meta.terms.join("+"), start: res.meta.start + res.meta.limit, @@ -55,9 +56,10 @@ var SearchResults = View.extend({ .replace(/{{title}}/, bold_terms(sanitize(result.thread.title), terms)) .replace(/{{comment}}/, result.comment ? bold_terms(sanitize(result.comment.comment), terms) : '') .replace(/{{file}}/, file_tag) + .replace(/{{strength}}/, result.strength) this.$("#results").append(t) }) - $("body").removeClass('loading') + $("body").removeClass('loading').addClass('search') }, }) diff --git a/views/pages/search.ejs b/views/pages/search.ejs index d830682..de93f24 100644 --- a/views/pages/search.ejs +++ b/views/pages/search.ejs @@ -11,7 +11,7 @@ <div id="results"> <div class="preamble"> - Results for <b class="query"></b> (<span class='total'></span> results) + Results for <b class="query"></b> (<span class='total'></span>) </div> <% include ../partials/metadata %> <script type="text/html" class="template"> @@ -20,7 +20,7 @@ <a href="/details/{{thread_id}}" class='search_hit'> {{title}} </a> - <div class='meta'>{{meta}}</div> + <div class='meta'>{{meta}} · Score: {{strength}}</div> <div class='snippet'>{{comment}}</div> <div class='file'>{{file}}</div> </div> |
