Mamy hostowaną aplikację, która zarządza stronami treści. Każda strona może zawierać wiele niestandardowych pól oraz kilka standardowych pól (znacznik czasu, nazwa użytkownika, adres e-mail użytkownika itp.).Efektywne filtrowanie/wyszukiwanie
Z potencjalnie setkami różnych witryn korzystających z systemu - jaki jest skuteczny sposób obsługi filtrowania/wyszukiwania? Obraz widoku siatki, który chcesz zawęzić. Możesz filtrować określone pola (identyfikator użytkownika, datę) lub wprowadzić wyszukiwanie pełnotekstowe.
Na przykład "wszystkie strony rozpoczęte przez userid 10" byłyby dość szybką kwerendą przeciwko bazie danych MySQL. Ale rzeczy takie jak "wszystkie strony rozpoczęte przez użytkownika, którego identyfikator użytkownika wynosi 10 i pasują [niektóre zapytanie wyszukiwania]" będą ssać w bazie danych, więc jest odpowiedni dla wyszukiwarki takiej jak Lucene.
W zasadzie zastanawiam się, jak inne duże witryny robią tego typu rzeczy. Czy wykorzystują one wyszukiwarkę w 100% do wszystkich rodzajów filtrowania? Czy mieszają zapytania do bazy danych z wyszukiwarką?
Jeśli korzystamy z wyszukiwarki tylko, występuje problem z czasem opóźnienia, jaki zajmuje pojawienie się nowego/zaktualizowanego obiektu w indeksie wyszukiwania. To znaczy, czytałem, że nie jest inteligentnie aktualizować indeks natychmiast, i zamiast tego robić to partiami. Nawet jeśli oznacza to co 5 minut, użytkownicy będą zdezorientowani, gdy ich ostatnio dodana strona nie zostanie natychmiast wyświetlona podczas przeglądania prostej strony (powiedz hasło wyszukiwania "kategoria: 5").
Używamy MySQL i uważnie przyglądamy się Lucene w poszukiwaniu. Czy istnieje inna technologia, o której nie wiem?
Moją myślą jest zaoferowanie prostej strony filtrującej, która używa MySQL do filtrowania podstawowych pól. Następnie zaoferuj oddzielną stronę wyszukiwania pełnotekstowego, która będzie prezentować wyniki podobne do Google. Czy to jedyny sposób?