Hello Claude, here is what I'm doing and it seems to work, I haven't yet created failure tests. Maybe more expert member will have more information.
Date field inserted: final Date parse = DATE_FORMAT.parse(DATE_FORMAT.format(o1)); new LongPoint(attributeName, parse.getTime())); The sorter: Sort sort = new Sort(SortField.FIELD_SCORE, new SortField(LAST_UPDATE, SortField.Type.STRING)); The query: TopDocs docs = searcher.search(q, maxCount, sort); The records are inserted with 1 sec delay (for tests purposes only) Stephane -----Original Message----- From: Claude Lepere <claudelep...@gmail.com> Reply-To: java-user@lucene.apache.org To: java-user@lucene.apache.org Subject: Custom scores and sort Date: Mon, 21 Feb 2022 10:56:18 +0100 Hi! I have a question with sorting, I don’t understand why in a test a hitwith a lower score is ranked before hits with higher scores. I am using Lucene 5.2.1. Two CustomScoreQuery subqueries on two fields, subquery 1 and subquery 2,and two test cases: case 1: the two calculated custom scores are multiplied by the same factordepending on the date of the match at the end of the customScore method ofCustomScoreProvider case 2: the two calculated custom scores are *not* multiplied by the datefactor. All tests with the same Sort, by score then by date. Case 1: with date factor: Test 1: subquery 1 only: two hits, doc A (date A) gets the score A1, doc B (date B) gets the scoreB1: score A1 > score B1, date A < date B, and doc A is ranked before doc B Explanation: doc A score A1 shardIndex=0 fields=[score A1, date A] doc B score B1 shardIndex=0 fields=[score B1, date B] That's correct. Test 2: MUST query subquery 1, subquery 2: the two same docs match: doc A (date A) gets the score A2, doc B (date B)gets the score B2: score A2 *<* score B2, date A < date B, and *doc A isranked before doc B* Explanation: doc A score A2 shardIndex=0 fields=[score A1, date A] doc B score B2 shardIndex=0 fields=[score B1, date B] *doc A is ranked before doc B although score A2 < score B2 and sortingshould use scores A2 and B2, not A1 and B1.* Case 2: without date factor: Test 1: subquery 1 only: doc A (date A) gets the score A1, doc B (date B) gets the score B1: scoreA1 > score B1, date A < date B, and doc A is ranked before doc B Explanation: doc A score A1 shardIndex=0 fields=[score A1, date A] doc B score B1 shardIndex=0 fields=[score B1, date B] Test 2: MUST query subquery 1, subquery 2: the two same docs match: doc A (date A) gets the score A2, doc B (date B)gets the score B2: score A2 *>* score B2, date A < date B, and doc A isranked before doc B Explanation: doc A score A2 shardIndex=0 fields=[score A1, date A] doc B score B2 shardIndex=0 fields=[score B1, date B] Using score A1 here works: without the date factor, all the hits of test 2match subquery 2 in the same way and they get the same sub- score: theexplanation shows in this case that the score = field[0] score + the commonsub-score of the hits, therefore the sorting is the same by current scoreas by field[0] score. But, with the date factor, this is no longer true, the sort [Score, date]should use the current scores of test 2 and not those of test 1. Please, could someone enlighten me? Do I make a mistake somewhere? Claude Lepère < http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail>Virus-free.www.avg.com < http://www.avg.com/email-signature?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail><#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2 >