Мы работаем с Cassandra и используем Solr поверх него (DSE).
В таблице offers
мы храним одно предложение в день для различных документов, которые идентифицированы некоторыми покупателем. Каждое предложение представляет различную цену, которая меняется каждый день, поэтому для каждого документа у нас может быть 30-60 предложений.
Как можно найти из всех документов покупателя по одному предложению на каждый документ, цена которого, например, ниже 10 $ ... или даже просто найти для каждого документа предложение, наиболее близкое по времени от текущий момент
Все поля, которые упоминаются в моем вопросе, проиндексированы.
OfferDate, offerPrice, идентификатор покупателя, идентификатор документа и т. Д.
Например, у нас есть все перечисленное ниже для одного и того же Покупателя1, и мы хотим найти предложение наиболее закрытое во времени:
document1
document2
document3
Для документа1 имеем:
offer1Document1.documentId=document1
offer1Document1.offerDate = today.plus(5)
offer2Document1.documentId=document1
offer2Document1.offerDate = today.plus(6)
offer3Document1.documentId=document1
offer3Document1.offerDate = today.plus(7)
Для документа2 у нас есть:
offer4Document2.documentId=document2
offer4Document2.offerDate = today.plus(1)
offer5Document2.documentId=document2
offer5Document2.offerDate = today.plus(2)
Для документа2 у нас есть:
offer5Document3.documentId=document3
offer6Document3.offerDate = today.plus(3)
offer7Document3.documentId=document3
offer7Document3.offerDate = today.plus(5)
Когда мы будем искать все предложения для документов Покупателя1, мы перечислим ВСЕ вышеупомянутые результаты - 7 результатов.
Как можно было бы отфильтровать результат, чтобы у нас было одно предложение для каждого документа, которое остается наиболее близким по времени, и результат (только одно предложение на документ с ближайшей датой):
offer1Document1.offerDate = today.plus(5)
offer4Document2.offerDate = today.plus(1)
offer6Document3.offerDate = today.plus(3)