2016-08-06 44 views
1

Wie kann ich unter Mysql zu solr konvertieren? Ich habe versucht, mit Solr Join zu implementieren, aber ich weiß nicht, wie die Verwendung mehrerer Bedingungen in solr Join über IN Query.Wie mehrere Bedingungen in solr Join mit IN-Abfrage zu tun?

SELECT * 
FROM rooms 
WHERE 
departure_g_date = "2016-08-04T00:00:00Z" 
AND returning_g_date = "2016-08-05T00:00:00Z" 
AND (room_adults_child = '1-0' OR (room_adults_child = '2-1' AND child_age = 1)) 
AND hotel_id IN (
        SELECT hotel_id 
        FROM rooms 
        WHERE 
         departure_g_date = "2016-08-04T00:00:00Z" 
         AND returning_g_date = "2016-08-05T00:00:00Z" 
         AND room_adults_child = '1-0' 
     ) 
AND hotel_id IN (
        SELECT hotel_id 
        FROM rooms 
        WHERE 
         departure_g_date = "2016-08-04T00:00:00Z" 
         AND returning_g_date = "2016-08-05T00:00:00Z" 
         AND room_adults_child = '2-1' 
     ) 

Antwort

1

Sie können nicht! Solr ist keine relationale Datenbank und ist nicht dafür ausgelegt, direkt mit Ihrer Struktur übereinzustimmen. Stattdessen soll es die Dinge leichter finden. Sie müssen also von dem, was Sie suchen, rückwärts denken und Ihre Datenbank darauf abbilden.

In Ihrem Fall scheint die Granularität eine Art Verfügbarkeit zu sein. So, vielleicht wird das Ihr Solr-Dokument mit hotelId, RoomId, RoomType, DateAvailable (single day). Dann suchen Sie im Grunde nach allen Räumen des richtigen Typs mit DateAvailable, die zwischen Ihrem Bereich liegen. Vielleicht gruppiert nach RoomId. Sie müssten dann überprüfen, ob diese Verfügbarkeit kontinuierlich ist, entweder mit Solr oder vielleicht sogar in der ursprünglichen Datenbank.

+0

Dieser Mysql-Code versuchen, alle Hotels zu finden, die zwei Arten von Zimmern (1 Erwachsener mit 0 Kind, und 2 Erwachsene mit 1 Kind), die zwischen dem Zeitraum verfügbar ist. – user2665477

+0

Sie können diese (ziemlich alte) Präsentation nützlich finden, um zu verstehen, warum ich vorschlage, eine andere Informationsstufe als Solr-Objekt darzustellen: http://www.slideshare.net/trenaman/personalized-search-on-the-largest-flash -sale-site-in-amerika (Folie 39 ist die Pointe) –