Sorry for adding to the confusion.
My recommendation to use text fields instead of numeric for your use case has to do with the internal implementation. The numeric field type is designed to support numeric range queries in a generic way (not knowing anything about the cardinality of your data). The way it makes searches performant, even if the range is large, and matches lots of documents, is to index multiple terms for each value. I won't explain the whole process, because it's not really necessary to understand the problem. In short, if you index the value numeric 1.0, we generate 16 terms for the index. If instead you index the text "1" or "one", we index just 1 term.
On the query side, in both cases you issue just a single query. Either NumericRangeQuery from 1-10 or a DisjunctionQuery containing 10 term queries, one each for "1", "2", etc. Internally, the execution of both of these is quite similar (disjunction of a hopefully small number of term queries). But if your index is 16x smaller, everything will be faster.
The NumericRangeQuery is most useful if you have lots of discrete numeric values, and need to support arbitrary ranges across the entire domain. In your case, you're paying extra indexing cost to support features you're not using.
However, as I said, this still does not address your scoring issue. I brought it up for completeness, because I often see the NumericRangeQuery used in this way, but it does not directly relate to your original question.
Unfortunately scoring is one of Bleve's weakest areas, and other than rescoring all the matches on the client side (which also means retrieving all hits, not just the top N), I don't have a good recommendation right now.
marty