On Fri, Dec 27, 2019 at 12:12 PM 小鱼儿 <ctengc...@gmail.com> wrote:

> But i feel very confused about this design: if i can search by some
> indexable field, means there should be some terms stored somewhere, so i
> should be able to get these terms as a Dictionary?
>
Right. Here we go MultiTerms.getTerms()


>
> Lucene docs says it uses the same field name for 2 kinds of index data
> store when set Store.YES,  it seems treating them the same, here i have to
> make 2 field names to compat the confusing and inner-conflicting design...
>
It might seems so. Almost everyone got though these doubts. I like to quote
this talk https://www.youtube.com/watch?v=T5RmMNDR5XI



>
> Mikhail Khludnev <m...@apache.org> 于2019年12月27日周五 下午5:05写道:
>
> > Hello,
> > It's by design: StringFields are searchable and filled by analysis
> output,
> > StoredFields are returned input values.
> > That's it.
> >
> > On Fri, Dec 27, 2019 at 11:32 AM 小鱼儿 <ctengc...@gmail.com> wrote:
> >
> > > I have a document `category` field, which is a "|,;" separator
> separated
> > > string, in indexing phase, i do manually split the value into atomic
> > terms
> > > and index as StringField, & i also add a same name StoredField which
> > > contains original value form:
> > >
> > >
> > >
> > >
> > >
> > > *List<String> terms = analyzer.analysis((String)fieldValue); for(String
> > > term: terms) {      doc.add(new StringField(fieldName, term,
> Store.NO));
> > > }doc.add(new StoredField(fieldName, (String)fieldValue));*
> > >
> > > Then i use Suggest API to load this field's all terms:
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > *        Set<String> terms = new HashSet<String>();
> > > DocumentDictionary dict = new DocumentDictionary(this.indexReader,
> > > fieldName, null);        InputIterator it;        try {            it =
> > > dict.getEntryIterator();            //            BytesRef byteRef =
> > null;
> > >           while((byteRef = it.next()) != null){                String
> > term
> > > = byteRef.utf8ToString();                terms.add(term);            }
> > >   } catch (IOException e) {            e.printStackTrace();
> > > log.error(e.getMessage(), e);        }*
> > >
> > > To my supprise, terms seems only returning the STORED value, which is
> the
> > > original value form, but i expect they should be the terms i put in
> each
> > > StringField!
> > >
> > > Is this a design miss or impl. limit?
> > >
> >
> >
> > --
> > Sincerely yours
> > Mikhail Khludnev
> >
>


-- 
Sincerely yours
Mikhail Khludnev

Reply via email to