Happy Holidays ! Test case doc1 : test -- one two three doc2 : test, one two three doc3 : one two three
Search query : "one two three" by QueryParser and StandardAnalyzer Question: why all of three documents have the same score? I really want the doc3 has higher score because it is an exact match and short. Can anybody explain this? I will appreciate a lot Here is my code and its output public class Test { public static void main(String[] args){ test(); } private static void test(){ String[] contents = {"test -- one two three", "test, one two three", "one two three"}; Directory dir = new RAMDirectory(); try { IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_30), IndexWriter.MaxFieldLength.UNLIMITED); for (int i=0; i<contents.length; i++){ Document doc = new Document(); doc.add(new Field("de", contents[i], Field.Store.YES, Field.Index.ANALYZED)); writer.addDocument(doc); } writer.close(); IndexSearcher searcher = new IndexSearcher(dir); QueryParser parser = new QueryParser(Version.LUCENE_30,"de", new StandardAnalyzer(Version.LUCENE_30)); Query q = parser.parse("one two three"); TopDocs topDocs = searcher.search(q, 10); for (ScoreDoc scoreDoc : topDocs.scoreDocs){ Document doc = searcher.doc(scoreDoc.doc); System.out.println(doc.get("de")); Explanation explan = searcher.explain(q, scoreDoc.doc); System.out.println(explan.toString()); } } catch (CorruptIndexException e) { e.printStackTrace(); } catch (LockObtainFailedException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } test -- one two three 0.6168854 = (MATCH) sum of: 0.20562847 = (MATCH) weight(de:one in 0), product of: 0.57735026 = queryWeight(de:one), product of: 0.71231794 = idf(docFreq=3, maxDocs=3) 0.8105233 = queryNorm 0.35615897 = (MATCH) fieldWeight(de:one in 0), product of: 1.0 = tf(termFreq(de:one)=1) 0.71231794 = idf(docFreq=3, maxDocs=3) 0.5 = fieldNorm(field=de, doc=0) 0.20562847 = (MATCH) weight(de:two in 0), product of: 0.57735026 = queryWeight(de:two), product of: 0.71231794 = idf(docFreq=3, maxDocs=3) 0.8105233 = queryNorm 0.35615897 = (MATCH) fieldWeight(de:two in 0), product of: 1.0 = tf(termFreq(de:two)=1) 0.71231794 = idf(docFreq=3, maxDocs=3) 0.5 = fieldNorm(field=de, doc=0) 0.20562847 = (MATCH) weight(de:three in 0), product of: 0.57735026 = queryWeight(de:three), product of: 0.71231794 = idf(docFreq=3, maxDocs=3) 0.8105233 = queryNorm 0.35615897 = (MATCH) fieldWeight(de:three in 0), product of: 1.0 = tf(termFreq(de:three)=1) 0.71231794 = idf(docFreq=3, maxDocs=3) 0.5 = fieldNorm(field=de, doc=0) test, one two three 0.6168854 = (MATCH) sum of: 0.20562847 = (MATCH) weight(de:one in 1), product of: 0.57735026 = queryWeight(de:one), product of: 0.71231794 = idf(docFreq=3, maxDocs=3) 0.8105233 = queryNorm 0.35615897 = (MATCH) fieldWeight(de:one in 1), product of: 1.0 = tf(termFreq(de:one)=1) 0.71231794 = idf(docFreq=3, maxDocs=3) 0.5 = fieldNorm(field=de, doc=1) 0.20562847 = (MATCH) weight(de:two in 1), product of: 0.57735026 = queryWeight(de:two), product of: 0.71231794 = idf(docFreq=3, maxDocs=3) 0.8105233 = queryNorm 0.35615897 = (MATCH) fieldWeight(de:two in 1), product of: 1.0 = tf(termFreq(de:two)=1) 0.71231794 = idf(docFreq=3, maxDocs=3) 0.5 = fieldNorm(field=de, doc=1) 0.20562847 = (MATCH) weight(de:three in 1), product of: 0.57735026 = queryWeight(de:three), product of: 0.71231794 = idf(docFreq=3, maxDocs=3) 0.8105233 = queryNorm 0.35615897 = (MATCH) fieldWeight(de:three in 1), product of: 1.0 = tf(termFreq(de:three)=1) 0.71231794 = idf(docFreq=3, maxDocs=3) 0.5 = fieldNorm(field=de, doc=1) one two three 0.6168854 = (MATCH) sum of: 0.20562847 = (MATCH) weight(de:one in 2), product of: 0.57735026 = queryWeight(de:one), product of: 0.71231794 = idf(docFreq=3, maxDocs=3) 0.8105233 = queryNorm 0.35615897 = (MATCH) fieldWeight(de:one in 2), product of: 1.0 = tf(termFreq(de:one)=1) 0.71231794 = idf(docFreq=3, maxDocs=3) 0.5 = fieldNorm(field=de, doc=2) 0.20562847 = (MATCH) weight(de:two in 2), product of: 0.57735026 = queryWeight(de:two), product of: 0.71231794 = idf(docFreq=3, maxDocs=3) 0.8105233 = queryNorm 0.35615897 = (MATCH) fieldWeight(de:two in 2), product of: 1.0 = tf(termFreq(de:two)=1) 0.71231794 = idf(docFreq=3, maxDocs=3) 0.5 = fieldNorm(field=de, doc=2) 0.20562847 = (MATCH) weight(de:three in 2), product of: 0.57735026 = queryWeight(de:three), product of: 0.71231794 = idf(docFreq=3, maxDocs=3) 0.8105233 = queryNorm 0.35615897 = (MATCH) fieldWeight(de:three in 2), product of: 1.0 = tf(termFreq(de:three)=1) 0.71231794 = idf(docFreq=3, maxDocs=3) 0.5 = fieldNorm(field=de, doc=2) Best regards, Qi Li