Jordan, Why not using NumberTools::long_to_s to convert your numeric values (indexing & search) ?
Jean-Etienne Jordan Frank wrote: > On 7/17/06, Gary Elliott <[EMAIL PROTECTED]> wrote: >> This is a "me too" post. I would love to replace the query filter we >> use on tourb.us with this. >> >> gary >> > > Maybe Gary, or someone else can help me, but I've put the query filter > problem aside, and I'm trying to do this by finding locations within a > bounding box using Range queries on the longitude and latitude. > Unfortunately I'm running into some problems, since I'm comparing > numeric values that can be positive or negative, and as far as I can > tell, Ferret (actually I've only been able to find information about > Lucene, but I'm assuming it's the same) does the comparisons > lexicographically, and not numerically. > > So I've tried to replicate the encoding as they do in > http://wiki.apache.org/jakarta-lucene/SearchNumericalFields, but I'm > encountering some strange behaviour that is throwing me off. > > So I index a bunch of documents, and see the following line of output: > Adding field latitude_string with value '004915010' to index > So that is the encoded version of 49.1501. > Now if I do the following query, I should get this record back: >>> Person.ferret_index.search_each("latitude_string:['000000000' '099999999']") > => 0 > > But I don't, and I can verify that lexicographically, ruby sees > '004915010' as lying between '000000000' and '099999999': >>> '000000000' <= '004915010' and '004915010' <= '099999999' > => true > > But the query returns no results. I've tried a few more, as follows: >>> Person.ferret_index.search_each("latitude_string:(> '000000000')") do end > => 7 >>> Person.ferret_index.search_each("latitude_string:(< '099900000')") do end > => 0 > > And so clearly it is not seeing that '004915010' < '099999999'. If I > remove the quotes, it works properly, but the problem is then with the > negative values. >>> Person.ferret_index.search_each("latitude_string:(> -00000000)") do end > => 0 >>> Person.ferret_index.search_each("latitude_string:(> '-00000000')") do end > => 7 > > So the quotes affect things, but then what if I need to search between > a negative value and a positive value. >>> Person.ferret_index.search_each("latitude_string:(< 099999999)") do end > => 7 >>> Person.ferret_index.search_each("longitude_string:(> '-00000000')") do end > => 7 >>> Person.ferret_index.search_each("latitude_string:['-00000000' > 099999999]") do end > => 0 > > For now should I just not be using range queries at all, and just > quote negative values? I'd have to do more testing to see if it's > accurate, but it seems to be the only way that works...maybe I could > make all values positive by adding a constant to them all? > > Any ideas why this is occuring? Am I doing this completely backwards, > is there an easier way to do the numeric comparisons? I'm very sorry > if this is an issue that has been discussed before, but I did look > through the archives and didn't find anything... > _______________________________________________ Ferret-talk mailing list [email protected] http://rubyforge.org/mailman/listinfo/ferret-talk

