Oh, thanks for the pointer! I'll look to see if I can use that.

On Wed, Jul 3, 2013 at 1:53 PM, Jack Krupansky <j...@basetechnology.com>wrote:

> There is a Lucene filter that you can use to check efficiently for whether
> a field has a value or not.
>
> new ConstantScoreQuery(new FieldValueFilter(String field, boolean negate))
>
> -- Jack Krupansky
>
> -----Original Message----- From: David Carlton
> Sent: Wednesday, July 03, 2013 4:27 PM
> To: java-user@lucene.apache.org
> Subject: handling nonexistent fields in an index
>
>
> I have a bunch of Lucene indices lying around, and I want to start adding a
> new field to documents in new indices that I'm generating. So, for a given
> index, either every document in the index will have that field or no
> document will have that field.
>
> The new field has a default value; and I would like to write a query that,
> when applied to old indices, matches all documents, while when applied to
> new indices, it will only match documents with that specific default value.
> (Probably the query will include other restrictions, but the other
> restrictions have nothing to do with the new field, so they'll apply to
> both indices.)
>
>
> I can, of course, write two different queries, one for the old indices and
> one for the new indices; for layering reasons, I'd prefer not to do that,
> but it's a possibility. (I can't, however, go back to the old indices and
> add the new field in.)
>
> Any suggestions for how to write a single query that will work in both
> places? Basically, what I want is a query that says something like
>
>  (field IS MISSING) OR (field = DEFAULT_VALUE)
>
> If it matters, the new field will only take one of a small number of
> values, ten or so.
>
>
> The one hint I've turned up when googling is this:
> http://stackoverflow.com/**questions/4365369/solr-search-**
> for-documents-where-a-field-**doesnt-exist<http://stackoverflow.com/questions/4365369/solr-search-for-documents-where-a-field-doesnt-exist>
>
> It talks in terms of Solr, but hopefully I can figure out how to translate
> that into stock Lucene? Thinking out loud about what it suggests, I guess
> maybe I can generate a WildcardQuery for my field with * (which I hope
> won't be too expensive, given how few values my field has), and then do
> something like
>
> (field = DEFAULT_VALUE) OR NOT (field matches *)
>
> And then I have to translate that into Lucene BooleanQuery syntax; I think
> I can probably handle that step of things (I've done that sort of thing
> before), but if anybody has tips, I'm all ears.
>
>
> Basically, any suggestions would be welcome, whether about the basic
> approach or about the details. And I would in particular very much
> appreciate advice as to whether or not WildcardQuery(field, *) will have
> good performance if field only takes a small number of values.
>
> --
> David Carlton
> carl...@sumologic.com
>
> ------------------------------**------------------------------**---------
> To unsubscribe, e-mail: 
> java-user-unsubscribe@lucene.**apache.org<java-user-unsubscr...@lucene.apache.org>
> For additional commands, e-mail: 
> java-user-help@lucene.apache.**org<java-user-h...@lucene.apache.org>
>
>


-- 
David Carlton
carl...@sumologic.com

Reply via email to