search: clean up mpixels:, filesize: tolerance handling.
Fold parse_helper_fudged into parse_helper. This is used to make mpixels:N and filesize:N do an inexact match with a 5% error tolerance. For example, filesize:1mb is really equivalent to filesize:0.95mb..1.05mb because an exact filesize:1mb search is unlikely to match anything.
This commit is contained in:
@@ -936,7 +936,7 @@ class PostQueryBuilder
|
|||||||
q[:height] = parse_helper(g2)
|
q[:height] = parse_helper(g2)
|
||||||
|
|
||||||
when "mpixels"
|
when "mpixels"
|
||||||
q[:mpixels] = parse_helper_fudged(g2, :float)
|
q[:mpixels] = parse_helper(g2, :float)
|
||||||
|
|
||||||
when "ratio"
|
when "ratio"
|
||||||
q[:ratio] = parse_helper(g2, :ratio)
|
q[:ratio] = parse_helper(g2, :ratio)
|
||||||
@@ -948,7 +948,7 @@ class PostQueryBuilder
|
|||||||
q[:fav_count] = parse_helper(g2)
|
q[:fav_count] = parse_helper(g2)
|
||||||
|
|
||||||
when "filesize"
|
when "filesize"
|
||||||
q[:filesize] = parse_helper_fudged(g2, :filesize)
|
q[:filesize] = parse_helper(g2, :filesize)
|
||||||
|
|
||||||
when "source"
|
when "source"
|
||||||
q[:source] = g2.gsub(/\A"(.*)"\Z/, '\1')
|
q[:source] = g2.gsub(/\A"(.*)"\Z/, '\1')
|
||||||
@@ -1156,22 +1156,13 @@ class PostQueryBuilder
|
|||||||
return [:in, range.split(/[, ]+/).map {|x| parse_cast(x, type)}]
|
return [:in, range.split(/[, ]+/).map {|x| parse_cast(x, type)}]
|
||||||
|
|
||||||
else
|
else
|
||||||
return [:eq, parse_cast(range, type)]
|
# add a 5% tolerance for float and filesize values
|
||||||
|
if type == :float || (type == :filesize && range =~ /[km]b?\z/i)
|
||||||
end
|
value = parse_cast(range, type)
|
||||||
end
|
[:between, value * 0.95, value * 1.05]
|
||||||
|
else
|
||||||
def parse_helper_fudged(range, type)
|
[:eq, parse_cast(range, type)]
|
||||||
result = parse_helper(range, type)
|
end
|
||||||
# Don't fudge the filesize when searching filesize:123b or filesize:123.
|
|
||||||
if result[0] == :eq && type == :filesize && range !~ /[km]b?\Z/i
|
|
||||||
result
|
|
||||||
elsif result[0] == :eq
|
|
||||||
new_min = (result[1] * 0.95).to_i
|
|
||||||
new_max = (result[1] * 1.05).to_i
|
|
||||||
[:between, new_min, new_max]
|
|
||||||
else
|
|
||||||
result
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user