Pracuję na Airbnb podobnego stronie i jestem w trakcie przepisywania nasz in-house, SQL na bazie systemu wyszukiwania z Algolia. To była naprawdę przyjemna podróż do tej pory, ponieważ udało mi się usunąć wiele starszego kodu i zlecić go na zewnątrz, z niesamowitymi rezultatami. Jest jednak jeden krytyczny element naszego systemu wyszukiwania, którego nie jestem pewien, czy mogę go wdrożyć w Algolii.Dostępność śledzenia z Algolia
Wewnętrznie możemy przechowywać dostępność/niedostępność (i cena) każdej dacie dla każdego składnika w postaci pojedynczego wiersza w bazie danych. Oznacza to nasza availabilities
tabela wygląda następująco:
asset_id | date | status | price_cents
-------- | ---------- | ----------- | -----------
1 | 2017-02-09 | available | 15000
1 | 2017-02-10 | available | 15000
1 | 2017-02-11 | unavailable | NULL
1 | 2017-02-12 | available | 20000
Gdy użytkownik wyszukuje dostępnych właściwości oni wprowadzić zakres dat i opcjonalnie przedział cenowy.
Co teraz robimy, to po prostu zapytanie do tabeli availabilities
i upewnienie się, że wszystkie daty w zakresie dat są dostępne dla tego zasobu (tzn. Liczba dostępnych dat jest równa liczbie dni w zakresie). Jeśli użytkownik wprowadzi przedział cenowy, upewniamy się również, że średnia cena dla tych dat mieści się w żądanym zakresie. Kwerenda SQL jest dość skomplikowana, ale tak właśnie jest pod koniec dnia.
Próbowałam powtórzyć to z Algolia, ale nie mógł znaleźć żadnej dokumentacji o podobnej funkcji. W rzeczywistości, jestem stoi dwie oddzielne kwestie teraz:
- nie mam możliwości, aby wszystkie daty przewidzianego zakresu dat są dostępne, ponieważ Algolia ma niewiele ma wiedzy o stowarzyszeniach oraz
- mam nie można obliczyć (i zapytać) średniej ceny z podanego zakresu dat, ponieważ zależy ona od danych wprowadzonych przez użytkownika (tj. zakresu dat).
Czy można to osiągnąć za pomocą Algolii? Jeśli nie, czy możliwe jest użycie SQL lub innego narzędzia w połączeniu z Algolia, aby osiągnąć pożądany rezultat? Oczywiście mogłem to wszystko zrobić z Elasticsearch, ale Algolia jest tak szybka i łatwa, że z powodu tych problemów nie chciałbym odejść.
Niestety przechowujemy dostępność przez cały rok. Czy istnieje sposób, w jaki mogę użyć SQL do filtrowania przed lub po Algolii? –
Wtedy będziesz szukał 66795 zakresów dat na mieszkanie, co prawdopodobnie byłoby zbyt drogie. – Jerska
Czy zawsze oczekuje się, że lista wyników będzie niska (<1000)? Na przykład, czy ograniczasz także lokalizację? Jeśli tak, to możesz użyć Algolii, aby uzyskać listę identyfikatorów obiektów pasujących do zapytania tekstowego i lokalizacji i wysłać tę listę identyfikatorów do MySQL, aby obliczyć dostępne z tej listy. – Jerska