Search API vs. Apache Solr Search

34

Korzystam z modułu wyszukiwania Apache Solr w Drupal 6 i szukam API wyszukiwania dla instalacji Drupal 7. Widziałem tutaj trochę dyskusji , ale szukam jakichkolwiek powodów, by wybrać jedną z nich.

Czy istnieje powód, aby wybierać między sobą? Jeśli tak, dlaczego lub dlaczego nie? Słyszałem, że mogą istnieć problemy ze złożonością i / lub problemy z wydajnością w Search API. Czy to prawda?

krzyż
źródło
Nie sugerowałbym solr do wyszukiwania w wielu językach. Zależy od tego, jak ważne jest wyszukiwanie w wielu językach, solr może być bardzo czasochłonne. Konfiguracja może być bolesna. W przypadku wyszukiwania wielojęzycznego Twój język musi być obsługiwany przez solr. Istnieją reguły gramatyczne, które należy ustawić dla twojego języka. Potrzebujesz także Java i Solr, abyś nie mógł korzystać z taniego hostingu współdzielonego. Jeśli tworzysz wyszukiwarkę, możesz z niej skorzystać. Jeśli obliczasz zasoby programistyczne, lepszym rozwiązaniem może być wyszukiwanie w witrynie Payd google! Jestem nawet współzałożycielem gss modułlep
ram4nd 15.11.11
Dlaczego? Jakieś wzorce?
giorgio79
Przykro mi, myślę, że konfiguracja może być bolesna. W przypadku wyszukiwania wielojęzycznego Twój język musi być obsługiwany przez solr. Istnieją reguły gramatyczne, które należy ustawić dla twojego języka. Również, gdy przyjrzałem się tym modułom, były one w stanie opracowywania i potrzebowały więcej pracy, aby wszystko działało. Ale to najszybsza wyszukiwarka. Musisz więc zadać sobie pytanie, jak ważna jest dla Ciebie funkcja wyszukiwania. Potrzebujesz także Java i Solr, abyś nie mógł korzystać z taniego hostingu współdzielonego.
ram4nd
Jedną z rzeczy, które musiałem przyjechać do Apache Solr w porównaniu do API wyszukiwania, było wyszukiwanie z filtrami wielokrotnego wyboru. Z Search API wydawało się to niemożliwe. Solr wydawał się mieć tę opcję.
user219492,
Wspomniałbym o obsłudze wielu witryn: SearchAPI nie obsługuje wielu witryn (używa tego samego indeksu SOLR do przechowywania zawartości wielu witryn). Zamiast tego Apachesolr pozwala na: 1. indeksowanie zawartości wielu sistes w tym samym indeksie SOLR 2. filtrowanie wyników według określonej witryny 3. przeprowadzanie wyszukiwania tylko na stronie lokalnej w celu odfiltrowania wyników z innych stron
thePanz

Odpowiedzi:

19

Od 2015 roku możemy porównać moduły Search API vs moduły Apache Solr Search z liczbami:

                   | Apache Solr Search  | Search API
Posted in:         | 2007                | 2010
Downloads:         | >2k                 | >20k
Reported installs: | >21k                | >64k
Total bugs:        | >1200               | >600
Active bugs:       | >200                | >170
Commits:           | >1.3k               | >1.5k

co wskazuje na wyraźny wybór. Search API został opracowany 3 lata później i udało mu się wykorzystać swojego konkurenta.

Co więcej, Search API zapewnia zupełnie inną i bardziej elastyczną architekturę i jest aktywniej utrzymywany. Co ważniejsze, ma już obsługę najnowszych Drupal 8 i Solr 5.x, których Apachesolr jeszcze nie ma.

Interfejs API wyszukiwania zaczął się od nowa i jest bardziej elastyczny w konfiguracji, w tym obsłudze widoków (do Apachesolr potrzebujesz dodatkowego modułu). Istnieje również wiele modułów rozszerzających jego funkcjonalność.

Po drugie, aby uniknąć problemów rozwiązywanych przez społeczność dwa razy z powodu różnic w architekturze tych modułów, obecnie istnieją pewne połączone wysiłki między tymi dwoma projektami, takie jak:

  • stworzenie wspólnego sposobu wyświetlania bloków aspektów za pomocą Facet API (znanego również jako filtry),
  • wspólne pliki konfiguracyjne schematu i solrconfig.xml,
  • obaj opiekunowie współpracowali i przeprowadzili migrację klas połączeń z modułu wyszukiwania Apache Solr do interfejsu API wyszukiwania.

Źródło: Battleplan for Search & Solr w Drupal 8 w Acquia

Uwaga: nie zaleca się używania obu modułów w tym samym środowisku.

Aby uzyskać dalszą analizę techniczną różnic, sprawdź szczegóły poniżej.

Wyszukaj API

Przegląd interfejsu API:

  • Ramy do łatwego tworzenia wyszukiwań
  • Streszczenia ze źródeł danych i implementacji backendu
  • Duży ekosystem z rozszerzeniami, np. Backendami
  • Integracja interfejsu API Facet
  • Mocno oparty na API Entity

    • Dostarcza metadane
    • Używany do konfiguracji indeksu i serwera

Funkcje rozszerzenia:

  • Wyszukiwanie autouzupełniania interfejsu API
  • Załączniki
  • Zapisane wyszukiwania
  • Lokalizacja
  • Ścieżki Pretty Facets
  • Suwak (zakresy API wyszukiwania)
  • i wiele więcej.

Podstawowa struktura:

Podstawowa struktura modułu wyszukiwania API Solr

Funkcje indeksu:

  • Różne źródła danych
  • Jedno źródło danych: podmioty
  • Na podstawie interfejsu API jednostki:

    • Każda właściwość może być indeksowana
    • Właściwości powiązanych jednostek można indeksować

Jak skonfigurować indeks - pola:

Jak skonfigurować indeks - pola w Search API Solr

Widoki interfejsu API wyszukiwania:

  • Pełna obsługa widoków
  • Wyświetl dowolną właściwość jednostki
  • Użyj dowolnego pola indeksowanego jako filtru, argumentu lub sortowania
  • Większość kodu opiera się na integracji widoków interfejsu API Entity
  • Domyślnie: dane pobierane poprzez ładowanie encji

    • Można go ominąć (ustawienie „Pobierz dane z Solr” na serwerze)
  • Alternatywnie: Wyszukaj strony interfejsu API

Przepisy API wyszukiwania:

  • Haki CRUD do indeksów i serwerów
  • Haczyki do dodawania

    • źródła danych
    • backendy
    • zmiany danych
    • procesory
  • Hak wystrzelony podczas indeksowania przedmiotów

  • Hak wystrzelony podczas wyszukiwania

Apachesolr

Funkcje rozszerzenia:

  • Załączniki (brak obsługi mediów, niestandardowe kodowanie załączników do innych podmiotów)
  • Lokalizacja (lokalizacja geograficzna Apachesolr, lokalizacja Apachesolr)

Przepisy Apachesolr:

  • Platforma wyszukiwania korporacyjnego Open Source
  • Fundacja Apache
  • Wyszukiwanie pełnotekstowe, wyróżnianie, wyszukiwanie aspektowe, grupowanie, bogata obsługa dokumentów
  • Rozpowszechniane
  • Replikacja / skalowalność
  • Jawa
  • REST HTTP i odpowiedzi w XML / JSON i niektórych innych
  • Nie relacyjny

Źródło: Search API vs pokaz slajdów Apachesolr


Zobacz też:

kenorb
źródło
Niesamowite napisanie, dzięki! Pytanie 1: dlaczego nie zaleca się używania obu modułów w tym samym środowisku? Pytanie 2: Czy różnice w wydajności między modułami są w tym momencie nieznaczne (rozumiem, że Search API w / solr może teraz indeksować wiele pól, więc ładowanie encji nie jest już wymagane do wyświetlania np. Miniatury z wynikami wyszukiwania)?
Jordan Magnuson
@JordanMagnuson 1. Nie używasz obu modułów jednocześnie, ponieważ nie są one w dużej mierze kompatybilne, a większość stron ma do czynienia tylko z jedną instancją wyszukiwania Solr, więc nie ma sensu używać obu modułów, chyba że nie przeszkadza powielanie pracy. Na przykład, gdy musisz utworzyć widok wyszukiwania, oba moduły oferują oddzielną integrację z modułem widoków, więc musisz utworzyć dwa widoki.
kenorb
@JordanMagnuson 2. Nie jestem pewien co do wydajności, nigdy nie miałem żadnej konkretnej i prawdopodobnie zmienia ona każdą wersję (używałem Apachesolr dość dawno temu). Jeśli używasz widoków i aspektów, zwykle używasz mechanizmu pamięci podręcznej widoków, więc nie przejmujesz się zbytnio czasem przetwarzania i oczywiście memcached, APC / XCache itp. Wydajność naprawdę zależy od struktury witryny i sposobu interakcji modułów inny.
kenorb
Zabawne, że Search API jest częściej używany, ale sama Acquia zaleca korzystanie z modułu Apache Solr docs.acquia.com/acquia-search/search-api#animated
AlxVallejo
@AlxVallejo Myślę, że polecają go do produkcji, ponieważ mają stabilne i dobrze napisane pliki konfiguracyjne Apachesolr do obsługi ich instancji Solr Cloud Acquia (udostępnionych) (to chyba jedyny powód), a biorąc pod uwagę, że Search API był aktywnie w fazie rozwoju, związane z tym ryzyko obejmowało konieczność częstszej aktualizacji plików konfiguracyjnych. Polecili go również do naszego (dużego) projektu, ale po krótkim czasie zabawy i sprawdzeniu naszych wymagań zmieniliśmy ich rekomendację na Search API. Nie mieli stabilnych plików konfiguracyjnych, jednak udostępniliśmy własne.
kenorb
24

Próbowałem użyć obu i mogę to powiedzieć: to zależy od twojej sytuacji.

Obecnie stabilna wersja 7 modułu integracji ApacheSolr może indeksować tylko węzły. Jeśli więc masz jednostki inne niż węzeł, które musisz zindeksować, musisz użyć do tego wciąż trwającej poprawki multientity . Integracja ApacheSolr może przechowywać wiele różnych danych treści, jeśli jest odpowiednio skonfigurowana.

Interfejs API wyszukiwania indeksuje wpisy i ma na to wiele wspaniałych rzeczy. Jednak interfejs API wyszukiwania pobiera tylko identyfikator szukanych danych. Oznacza to, że załadowanie jakichkolwiek danych innych niż identyfikator będzie wymagało load_load, uderzenie w bazę danych lub dowolną warstwę buforowania, którą umieściłeś. W przypadku witryn wymagających dużej liczby wyszukiwań może to nie być najbardziej zoptymalizowane rozwiązanie.

Oto świetna prezentacja na drupalcon chicago na temat modułu integracji ApacheSolr, minuta 16 na wzmianki o API wyszukiwania.

LSU_JBob
źródło
niesamowity przegląd. dokładnie to, co chciałem wiedzieć. dzięki!
przez
Jeśli to pytanie pozwoliło odpowiedzieć na twoje pytanie, czy możesz je oznaczyć jako odpowiedź? Dzięki!
LSU_JBob
1
Dla tych, którzy zastanawiają się, multientity jest teraz w gałęzi deweloperskiej integracji Apache Solr, więc powinno być dostępne w następnej wersji beta.
LSU_JBob
2
Dla osób czytających ten wątek. Jednym z czynników ograniczających wydajność jest interfejs API wyszukiwania, który umożliwia teraz indeksowanie i pobieranie danych węzłów. Tutaj jest dyskusja na temat wydajności .
przez
1
Ta odpowiedź jest nieaktualna, spójrz na drupal.org/node/1999392 search_api_solr ma teraz opcje dla wielu witryn , umożliwia także zwracanie nie tylko NID. Ogromny wzrost bazy instalacyjnej search_api_solr w 2014 r. Wyprzedził użycie D7 przez Apachesolr.
Duncanmoo,
2

Myślę, że naprawdę musisz spróbować obu i podjąć świadomą decyzję. Należy jednak pamiętać, że apachesolr wciąż nie ma wersji beta dla Drupal 8.

W Search API nie można łączyć encji z tym samym indeksem SearchAPI. Profile, użytkownicy i węzły znajdują się w różnych indeksach. Istnieje moduł pozwalający na wyszukiwanie wielu indeksów, nie zaspokajał moich potrzeb, ale YMMV. Jeśli masz wiele typów treści i wiele pól w tym samym indeksie, definicja indeksu może stać się dość dziwnie. (NB Raporty SearchAPI D8 do obsługi wyszukiwania wielu indeksów)

Apachesolr pozwala na edycję pól na podstawie zawartości, co może być łatwiejsze, ale nie ma możliwości dodawania pokrewnych treści do dokumentu, w rzeczywistości oczekuje napisania niestandardowego kodu zawierającego informacje z kolekcji pól, referencji i innych pola. Apachesolr D7 nie obsługuje ajax, chyba że używasz widoków, ale używając widoków tracisz aspekty. To powiedziawszy ... modyfikowanie informacji przechowywanych w indeksie jest dość łatwe, jeśli z przyjemnością kodujesz haczyki.

Pomysł wyszukiwania identyfikatorów encji, a następnie renderowania każdego z nich osobno (może być używany przez oba moduły) wydaje się koszmarem wydajności, ale jeśli buforujesz swoją encję, może być bardziej wydajna niż renderowanie z odpowiedzi solr.

dmcg
źródło