summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bucky/search/lexicon.js17
-rw-r--r--bucky/search/search.js2
-rw-r--r--bucky/util/middleware.js2
-rw-r--r--public/assets/css/bucky.css1
-rw-r--r--public/assets/js/lib/views/search/results.js6
-rw-r--r--views/pages/search.ejs4
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}} &middot; Score: {{strength}}</div>
<div class='snippet'>{{comment}}</div>
<div class='file'>{{file}}</div>
</div>