tweak result counts for autocomplete
This commit is contained in:
@@ -2,7 +2,7 @@ module TagAutocomplete
|
|||||||
extend self
|
extend self
|
||||||
|
|
||||||
PREFIX_BOUNDARIES = "(_/:;-"
|
PREFIX_BOUNDARIES = "(_/:;-"
|
||||||
LIMIT = 10
|
LIMIT = 12
|
||||||
|
|
||||||
class Result < Struct.new(:name, :post_count, :category, :antecedent_name, :weight)
|
class Result < Struct.new(:name, :post_count, :category, :antecedent_name, :weight)
|
||||||
def to_xml(options = {})
|
def to_xml(options = {})
|
||||||
@@ -15,17 +15,17 @@ module TagAutocomplete
|
|||||||
|
|
||||||
candidates = count_sort(
|
candidates = count_sort(
|
||||||
query,
|
query,
|
||||||
search_exact(query, 3) +
|
search_exact(query, 8) +
|
||||||
search_prefix(query, 3) +
|
search_prefix(query, 4) +
|
||||||
search_correct(query, 2) +
|
search_correct(query, 2) +
|
||||||
search_aliases(query, 3)
|
search_aliases(query, 6)
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def count_sort(query, words)
|
def count_sort(query, words)
|
||||||
words.uniq.slice(0, LIMIT).sort_by do |x|
|
words.uniq.sort_by do |x|
|
||||||
x.post_count * x.weight
|
x.post_count * x.weight
|
||||||
end.reverse
|
end.reverse.slice(0, LIMIT)
|
||||||
end
|
end
|
||||||
|
|
||||||
def search_exact(query, n=4)
|
def search_exact(query, n=4)
|
||||||
@@ -49,7 +49,7 @@ module TagAutocomplete
|
|||||||
|
|
||||||
Tag
|
Tag
|
||||||
.where("name % ?", query)
|
.where("name % ?", query)
|
||||||
.where("abs(length(name) - ?) <= 2", query.size)
|
.where("abs(length(name) - ?) <= 3", query.size)
|
||||||
.where("name like ? escape E'\\\\'", query[0].to_escaped_for_sql_like + '%')
|
.where("name like ? escape E'\\\\'", query[0].to_escaped_for_sql_like + '%')
|
||||||
.where("post_count > 0")
|
.where("post_count > 0")
|
||||||
.order(Arel.sql("similarity(name, #{Tag.connection.quote(query)}) DESC"))
|
.order(Arel.sql("similarity(name, #{Tag.connection.quote(query)}) DESC"))
|
||||||
|
|||||||
Reference in New Issue
Block a user