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