Hello, I am investigating the following use case.
Suppose I have a list of queries q_0, q_1, ..., q_n which I combine to a boolean query using 'SHOULD'-clauses. The requirement for the hits sorting is that the results of q_0 precede the results of q_1, the results of q_1 precede the results of q_2 an so on. If a hit occurs in the results of more then one query, then we should see it only once in the results of the query with the smallest index. I have searched for some solutions but didn't find anything useful so far. I have considered following approaches: 1. Reformulate: q0 & (q_1 & !q_0) & (q2 & !q_0 & !q1) & ... While possible, seems to have a potential negative impact on performance due to multiple evaluations on the same queries. I didn't do any measurements, though. It is technically possible to optimize the execution of this query to evaluate the subqueries q_i only once, but I don't know, whether this kind of optimizations is implemented in the current Lucene/Solr. (?) 2. Implement CustomScoreQuery. General idea: Take a list of queries and execute them in the context of a BooleanQuery mapping the scores of the corresponding subqueries to disjunct score ranges, like q_n -> [0,1), q_(n-1) -> [1,2) and so on. Problem: CustomScoreQuery is deprecated, FunctionQuery is the recommeded approach. Still I didn't see any obvious solution how I can use FunctionQuery to implement the idea. Is it possible, should I dive in and try to do it with FunctionQuery. 3. Assuming there is some possibility to solve the task with the FunctionQuery (or anything within the out-of-the-box Solr). My questions are: Is there any solution without having to write our own extension to Solr? Using only what is delivered in the standard distribution of Solr? Note: In the past we solved the problem within our legacy application with a modified BooleanQuery/BooleanScorer. We could migrate (=rewrite) this extension to the current Solr/Lucene, but it may be not the best option, so I am exploring all the other possibilities. Thank you all & Best regards, Robert