You should ask this question on the java-u...@lucene.apache.org mailing list - you will likely find more people there who can help you.
Also note, I don't think that you can use doc values on triefields. Upayavira On Tue, Jul 14, 2015, at 08:06 AM, Peyman Faratin wrote: > Hi > > I am having problems accessing float values in a lucene 5.0 index via > the functionquery. > > My setup is as follows > > Indexing time > ------------------ > Documentdoc = newDocument(); > FieldTypef = newFieldType(); > f.setStored(false); > f.setNumericType(NumericType.FLOAT); > f.setDocValuesType(DocValuesType.NUMERIC); > f.setNumericPrecisionStep(4); > f.setIndexOptions(IndexOptions.DOCS); > > for(Entry<Integer, Float> component:vector.entrySet()) { > String w = component.getKey().toString(); > Float score = component.getValue(); > > doc.add(new FloatField(w, score, f)); > } > writer.addDocument(doc); > At end of indexing I do > > writer.forceMerge(1); > > writer.close(); > > Search Time > ------------------ > for(Entry<Integer,Float> vector:vectors.entrySet()) > { > w = vector.getKey().toString(); > Float score = (Float) vector.getValue(); > Query tq= NumericRangeQuery.newFloatRange(w, 0.0f, 100.0f, > true, true); > FunctionQuery fq = newFunctionQuery( newFloatFieldSource(w) ); > CustomScoreQuery customQ = new My_CustomScorerQuery(tq, fq,score); > TopDocs topDocs = indexSearcher.search(customQ,10000); > } > where My_CustomScorerQuery() is defined as follows: > public class My_CustomScorerQuery extends CustomScoreQuery{ > public My_CustomScorerQuery(Query mainQuery,FunctionQuery > valSrcQuery,Float mainQueryScore) { > super(mainQuery,valSrcQuery); > this.mainQueryScore = mainQueryScore; > } > public CustomScoreProvider > getCustomScoreProvider(LeafReaderContext r) { > return new My_CustomScorer(r); > } > private class My_CustomScorer extends CustomScoreProvider{ > public My_CustomScorer(LeafReaderContext context) { > super(context); > } > public float customScore(int doc,float subQueryScore, float > valSrcScore) { > System.out.println("\thit lucene docID: "+doc+ > "\n\tquery score: "+mainQueryScore+ > "\n\tsubQueryScore: "+subQueryScore+ > "\n\tvalSrcScore: "+valSrcScore); > > return (float) (mainQueryScore * valSrcScore); > } > } > } > The problem I am seeing is that the `valSrcScore` is always 0, and > sometimes disappears if I change the "setNumericPrecisionStep" above > 4. I am indexing the following 2 docs > Map<Integer, Float> doc1 = newLinkedHashMap<Integer, Float>(); > doc1.put(12,0.5f); > doc1.put(18,0.4f); > doc1.put(10,0.1f); > > indexer.indexVector("doc1", doc1); > > Map<Integer, Float> doc2 = newLinkedHashMap<Integer, Float>(); > doc2.put(10,0.9f); > doc2.put(1,0.8f); > doc2.put(9,0.2f); > > doc2.put(2,0.1f); > > and testing with the following query: > Map<Integer, Float> query = newLinkedHashMap<Integer, Float>(); > query.put(10,0.8f); > query.put(9,0.6f); > > query.put(2,0.01f); > > So field `10` in the query should have the following total scores for > the two documents in the index > score(query,doc0) = 0.8*0.1 > score(query,doc1) = 0.8*0.9 > > but I only see > score(query,doc0) = 0.8*0.0 > score(query,doc1) = 0.8*0.0 > > i.e. FloatFieldSource is always returning 0. If I subclass > "FloatFieldSource" then accessing > > NumericDocValues arr = > DocValues.getNumeric(readerContext.reader(), field); > > tells me "NumericDocValues of doc0: 0" which _seems_ to suggest > indexing does not contain the docvalues? I can see the docs fine in > Luke. There is a subtle nuance (related to the way I am indexing the > fields --> some fields in a doc are "not present" and some are). > > Any pointers would be much appreciated > > Peyman > > > >