lucene-solr-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tomas Fernandez Lobbe <tflo...@apple.com>
Subject Re: Solr 6: how to get SortedSetDocValues from index by field name
Date Thu, 15 Jun 2017 01:47:04 GMT
Hi,
To respond your first question: “How do I get SortedSetDocValues from index by field name?”,
DocValues.getSortedSet(LeafReader reader, String field) (which is what you want to use to
assert the existence and type of the DV) will give you the dv instance for a single leaf reader.
In general, a leaf reader is for a specific segment, so depending on what you want to do you
may need to iterate through all the leaves (segments) if you want all values in the index
(kind of what you’ll see in NumericFacets or IntervalFacets classes). 

SolrIndexSearcher.getSlowAtomicReader() will give you a view of all the segments as a single
reader, that’s why in that case the code assumes there is only one reader that contains
all the values. 

Whatever you do, make sure you test your code in cases with multiple segments (and with deletes),
which is where bugs using this code are most likely to occur.

You won’t need the UninvertingReader if you plan to index docValues, that class is used
to create a docValues-like view of a field that’s indexed=true & docValues=false.

Related note, the DocValues API changed from 6.x to 7 (master). See LUCENE-7407.

I hope that helps, 

Tomás

> On Jun 13, 2017, at 10:49 AM, SOLR4189 <Klin892006@yandex.ru> wrote:
> 
> How do I get SortedSetDocValues from index by field name?
> 
> I try it and it works for me but I didn't understand why to use
> leaves.get(0)? What does it mean? (I saw such using in
> TestUninvertedReader.java of SOLR-6.5.1):
> 
> *Map<String, UninvertingReader.Type> mapping = new HashMap<>();
> mapping.put(fieldName, UninvertingReader.Type.SORTED);
> 
> SolrIndexSearcher searcher = req.getSearcher();
> 
> DirectoryReader dReader = searcher.getIndexReader();
> LeafReader reader = null;
> 
> if (!dReader.leaves.isEmpty()) {
>  reader = dReader.leaves().get(0).reader;
>  return null;
> }
> 
> SortedSetDocValues sourceIndex = reader.getSortedSetDocValues(fieldName);*
> 
> Maybe do I need to use SlowAtomicReader, like it:
> 
> *
> UninvertingReader reader = new
> UninvertingReader(searcher.getSlowAtomicReader(), mapping)*;
> 
> What is right way to get SortedSetDocValues and why?
> 
> 
> 
> --
> View this message in context: http://lucene.472066.n3.nabble.com/Solr-6-how-to-get-SortedSetDocValues-from-index-by-field-name-tp4340388.html
> Sent from the Solr - User mailing list archive at Nabble.com.


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message