To jest kontynuacja poprzedniego artykułu. Omówimy, jak doprecyzować zapytanie, sformułować bardziej złożone kryteria wyszukiwania z różnymi parametrami i zrozumieć różne formularze internetowe na stronie Apache Solr. Omówimy również, jak przetworzyć wynik wyszukiwania przy użyciu różnych formatów wyjściowych, takich jak XML, CSV i JSON.
Odpytywanie Apache Solr
Apache Solr jest zaprojektowany jako aplikacja internetowa i usługa działająca w tle. W rezultacie dowolna aplikacja kliencka może komunikować się z Solr poprzez wysyłanie do niej zapytań (przedmiot tego artykułu), manipulowanie rdzeniem dokumentu poprzez dodawanie, aktualizowanie i usuwanie zaindeksowanych danych oraz optymalizację danych podstawowych. Dostępne są dwie opcje - za pośrednictwem pulpitu nawigacyjnego/interfejsu internetowego lub za pomocą interfejsu API poprzez wysłanie odpowiedniego żądania.
Powszechnie używa się pierwsza opcja do celów testowych, a nie do regularnego dostępu. Poniższy rysunek przedstawia Dashboard z Administracyjnego Interfejsu Użytkownika Apache Solr z różnymi formularzami zapytań w przeglądarce internetowej Firefox.
Najpierw z menu pod polem wyboru rdzenia wybierz pozycję menu „Zapytanie”. Następnie panel wyświetli kilka pól wejściowych w następujący sposób:
- Obsługa żądań (qt):
Określ, jakiego rodzaju zapytanie chcesz wysłać do Solr. Można wybrać między domyślnymi procedurami obsługi żądań „/select” (dane zindeksowane przez zapytanie), „/update” (aktualizacja zindeksowanych danych) i „/delete” (usunięcie określonych zindeksowanych danych) lub zdefiniowaną samodzielnie. - Zdarzenie zapytania (q):
Określ, które nazwy pól i wartości mają być wybrane. - Zapytania filtrujące (fq):
Ogranicz nadzbiór dokumentów, które można zwrócić bez wpływu na wynik dokumentu. - Kolejność sortowania (sortowanie):
Zdefiniuj porządek sortowania wyników zapytania na rosnąco lub malejąco - Okno wyjściowe (początek i wiersze):
Ogranicz wyjście do określonych elementów - Lista pól (fl):
Ogranicza informacje zawarte w odpowiedzi na zapytanie do określonej listy pól. - Format wyjściowy (masa):
Zdefiniuj żądany format wyjściowy. Wartość domyślna to JSON.
Kliknięcie przycisku Wykonaj zapytanie uruchamia żądane żądanie. Praktyczne przykłady znajdziesz poniżej.
Jako druga opcja, możesz wysłać zapytanie za pomocą API. Jest to żądanie HTTP, które może zostać wysłane do Apache Solr przez dowolną aplikację. Solr przetwarza żądanie i zwraca odpowiedź. Szczególnym przypadkiem jest połączenie z Apache Solr przez Java API. Zostało to zlecone do osobnego projektu o nazwie SolrJ [7] - Java API bez konieczności połączenia HTTP.
Składnia zapytania
Składnia zapytania jest najlepiej opisana w [3] i [5]. Różne nazwy parametrów bezpośrednio odpowiadają nazwom pól wprowadzania w formularzach wyjaśnionych powyżej. Poniższa tabela przedstawia je wraz z praktycznymi przykładami.
Indeks parametrów zapytania
Parametr | Opis | Przykład |
---|---|---|
q | Główny parametr zapytania Apache Solr - nazwy pól i wartości. Ich wyniki podobieństwa dokumentują terminy w tym parametrze. | Id: 5 samochody:*adilla* *:X5 |
fq | Ogranicz zbiór wyników do dokumentów nadzbioru, które pasują do filtra, na przykład zdefiniowanego za pomocą funkcji Analizator zapytań o zakres funkcji | Model identyfikator, model |
początek | Przesunięcia wyników na stronie (początek). Domyślna wartość tego parametru to 0. | 5 |
wydziwianie | Przesunięcia wyników na stronie (koniec). Wartość tego parametru to domyślnie 10 | 15 |
sortować | Określa listę pól oddzielonych przecinkami, według których mają być sortowane wyniki zapytania | model asc |
fl | Określa listę pól do zwrócenia dla wszystkich dokumentów w zestawie wyników | Model identyfikator, model |
wt | Ten parametr reprezentuje typ programu do zapisywania odpowiedzi, który chcieliśmy wyświetlić w wyniku. Wartość tego to domyślnie JSON. | json xml |
Wyszukiwanie odbywa się za pośrednictwem żądania HTTP GET z ciągiem zapytania w parametrze q. Poniższe przykłady wyjaśnią, jak to działa. W użyciu jest curl do wysyłania zapytań do Solr, który jest instalowany lokalnie.
- Pobierz wszystkie zestawy danych z podstawowych samochodów curl http://localhost:8983/solr/cars/query?q=*:*
- Pobierz wszystkie zestawy danych z głównych samochodów o identyfikatorze 5 curl http://localhost:8983/solr/cars/query?q=id:5
- Pobierz model terenowy ze wszystkich zbiorów danych głównych samochodów
Opcja 1 (ze znakiem ucieczki &): curl http://localhost:8983/solr/cars/query?q=id:*\&fl=modelOpcja 2 (zapytanie w pojedynczych tikach):
curl 'http://localhost:8983/solr/cars/query?q=id:*&fl=model' - Pobierz wszystkie zestawy danych podstawowych samochodów posortowane według ceny w kolejności malejącej i wypisz tylko pola marka, model i cena (wersja z pojedynczymi znacznikami): curl http://localhost:8983/solr/cars/query -d '
q=*:*&
sort=cena opis&
fl=marka,model,cena ' - Pobierz pierwsze pięć zestawów danych podstawowych samochodów posortowanych według ceny w porządku malejącym i wypisz tylko pola marki, modelu i ceny (wersja z pojedynczymi znacznikami): curl http://localhost:8983/solr/cars/query - d'
q=*:*&
wiersze=5&
sort=cena opis&
fl=marka,model,cena ' - Pobierz pierwsze pięć zestawów danych podstawowych samochodów posortowanych według ceny w porządku malejącym i wypisz tylko markę, model i cenę wraz z wynikiem trafności (wersja z pojedynczymi zaznaczeniami): curl http://localhost:8983/solr/ samochody/zapytanie -d '
q=*:*&
wiersze=5&
sort=cena opis&
fl=marka,model,cena,wynik ' - Zwróć wszystkie zapisane pola, a także wynik trafności: curl http://localhost:8983/solr/cars/query -d '
q=*:*&
fl=*, wynik '
Ponadto możesz zdefiniować własny program obsługi żądań, aby wysyłać opcjonalne parametry żądania do parsera zapytań, aby kontrolować, jakie informacje są zwracane.
Parsery zapytań
Apache Solr używa tzw. parsera zapytań - komponentu, który tłumaczy wyszukiwany ciąg na konkretne instrukcje dla wyszukiwarki. Parser zapytań stoi między Tobą a dokumentem, którego szukasz.
Solr zawiera różne typy parserów, które różnią się sposobem obsługi przesłanego zapytania. Analizator zapytań standardowych działa dobrze w przypadku zapytań strukturalnych, ale jest mniej odporny na błędy składniowe. Jednocześnie zarówno DisMax, jak i Extended DisMax Query Parser są zoptymalizowane pod kątem zapytań podobnych do języka naturalnego. Służą do przetwarzania prostych fraz wprowadzanych przez użytkowników i wyszukiwania poszczególnych terminów w kilku polach przy użyciu różnych wag.
Ponadto Solr oferuje również tzw. Zapytania Funkcyjne, które umożliwiają połączenie funkcji z zapytaniem w celu wygenerowania określonego wyniku istotności. Te parsery noszą nazwy Function Query Parser i Function Range Query Parser. Poniższy przykład pokazuje ten ostatni, który wybiera wszystkie zestawy danych dla „bmw” (przechowywane w polu danych marki) z modelami od 318 do 323:
curl http://localhost:8983/solr/cars/query -d 'q=make:bmw&
fq=model:[318 TO 323] '
Przetwarzanie końcowe wyników
Wysyłanie zapytań do Apache Solr to jedna część, ale post-processing wyników wyszukiwania z drugiej. Po pierwsze, możesz wybierać między różnymi formatami odpowiedzi - od JSON do XML, CSV i uproszczonego formatu Ruby. Po prostu określ odpowiedni parametr wt w zapytaniu. Poniższy przykład kodu demonstruje to, aby pobrać zestaw danych w formacie CSV dla wszystkich elementów używających curl z eskejpowanymi &:
curl http://localhost:8983/solr/cars/query?q=id:5\&wt=csvDane wyjściowe to lista oddzielona przecinkami w następujący sposób:
Aby otrzymać wynik jako dane XML, ale tylko dwa pola wyjściowe make i model, uruchom następujące zapytanie:
curl http://localhost:8983/solr/cars/query?q=*:*\&fl=make,model\&wt=xmlDane wyjściowe są inne i zawierają zarówno nagłówek odpowiedzi, jak i rzeczywistą odpowiedź:
Wget po prostu wypisuje otrzymane dane na standardowe wyjście. Pozwala to na przetwarzanie końcowe odpowiedzi przy użyciu standardowych narzędzi wiersza poleceń. Aby wymienić kilka, zawiera jq [9] dla JSON, xsltproc, xidel, xmlstarlet [10] dla XML oraz csvkit [11] dla formatu CSV.
Wniosek
Ten artykuł pokazuje różne sposoby wysyłania zapytań do Apache Solr i wyjaśnia, jak przetworzyć wynik wyszukiwania. W kolejnej części dowiesz się, jak używać Apache Solr do wyszukiwania w PostgreSQL, systemie zarządzania relacyjnymi bazami danych.
O Autorach
Jacqui Kabeta jest ekologiem, zapalonym badaczem, trenerem i mentorem. W kilku krajach afrykańskich pracowała w branży IT i środowiskach NGO.
Frank Hofmann jest programistą IT, trenerem i autorem i woli pracować w Berlinie, Genewie i Kapsztadzie. Współautor książki o zarządzaniu pakietami Debiana dostępnej w dpmb.organizacja
Linki i referencje
- [1] Apache Solr, https://lucene.Apache.org/solr/
- [2] Frank Hofmann i Jacqui Kabeta: Wprowadzenie do Apache Solr. Część 1, http://linuxhint.com
- [3] Yonik Seelay: Składnia zapytań Solr, http://yonik.com/solr/składnia-zapytania/
- [4] Yonik Seelay: Samouczek Solr, http://yonik.pl/solr-samouczek/
- [5] Apache Solr: Odpytywanie danych, Tutorialspoint, https://www.punkt samouczków.com/apache_solr/apache_solr_querying_data.htm
- [6] Lucene, https://lucene.Apache.organizacja/
- [7] SolrJ, https://lucene.Apache.org/solr/guide/8_8/using-solrj.html
- [8] curl, https://curl.se/
- [9] jq, https://github.com/stedolan/jq
- [10] xmlstarlet, http://xmlstar.źródłoforge.netto/
- [11] csvkit, https://csvkit.przeczytaj dokumentację.io/pl/ostatnie/