excluding them completely is a slightly differnet task, you don't need to index a special marker value, you can just use a RangeFilter (or ConstantScoreRangeQuery) to ensure you only get docs with a value for that field (ie: field:[* TO *])
Excellent, this is a much better solution. BTW, adding a ConstantScoreRangeQuery clause to the query works fine, but building the RangeFilter from the query string "field:[* TO *] doesn't work. The reason is that the terms expanded from the lowerTerm wildcard are compared to 'upperTerm' which is literally '*', which is incorrect. This would appear to be a bug in QueryParser as it ought to set lowerTerm = upperTerm = null in this case. Thanks, Peter On 4/12/07, Chris Hostetter <[EMAIL PROTECTED]> wrote:
: If i rememebr correctly (you'll have to test this) sorting on a field : which doesn't exist for every doc does what you would want (docs with : values are listed before docs without) : The actual behavior is different than described above. I modified : TestSort.java: : The actual order of the results is: "ZJI". I believe this happens because : the field string cache 'order' array contains 0's for all the documents that : don't contain the field and thus sort first. i guess wasn't precise enough in that old thread, what i ment was that not having a vlaue results in the docs sorting the same as if they had a value lower then the lowest existing value -- so they sort at the end of the list if you are doing a descending sort, and at the begining of the list if you do an ascending sort. If you want to always have them come "last" regardless of order, there is a SortComparator for that purpose in Solr... https://issues.apache.org/jira/browse/LUCENE-406 http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/search/MissingStringLastComparatorSource.java?view=log : Suppose I want to exclude documents from being collected if they don't : contain the sort field. One way to do this is to index a unique : 'empty_value' value for those documents and add a MUST_NOT boolean clause to : the query, for example: "<query terms> -field:empty_value)". But this seems : inefficient. Is there a better way? excluding them completely is a slightly differnet task, you don't need to index a special marker value, you can just use a RangeFilter (or ConstantScoreRangeQuery) to ensure you only get docs with a value for that field (ie: field:[* TO *]) -Hoss --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]