Jak zaimplementować pełnotekstowe wyszukiwanie java z GroupDocs.Search
W erze aplikacji opartych na danych, java full text search jest niezbędne do przekształcania ogromnych zbiorów dokumentów w natychmiastowo przeszukiwalne bazy wiedzy. Niezależnie od tego, czy tworzysz portal klasy korporacyjnej, czy lekki program desktopowy, dobrze skonfigurowana sieć wyszukiwania może skrócić opóźnienie zapytań z sekund do milisekund i utrzymać wyniki istotne w miarę wzrostu danych. Ten samouczek przeprowadzi Cię przez wdrożenie GroupDocs.Search for Java, dodawanie plików do wyszukiwania, konfigurowanie katalogów na węzłach oraz włączanie indeksowania w czasie rzeczywistym, aby Twój indeks pozostawał aktualny bez ręcznej interwencji.
Dlaczego to ważne: Indeks java full text search zmniejsza opóźnienie zapytań, skaluje się wraz z wolumenem danych i zapewnia potężne możliwości pełnotekstowego wyszukiwania w dowolnym rozwiązaniu opartym na Javie — portalach internetowych, aplikacjach desktopowych lub mikroserwisach w chmurze.
Szybkie odpowiedzi
- Jaki jest główny cel GroupDocs.Search? Zapewnia skalowalny silnik wyszukiwania java, który indeksuje i przeszukuje dokumenty w rozproszonej sieci.
- Którą wersję powinienem używać? Najnowsze stabilne wydanie (np. 25.4) jest zalecane dla nowych projektów.
- Czy potrzebuję licencji? Dostępna jest 30‑dniowa darmowa wersja próbna; stała licencja jest wymagana do użytku produkcyjnego.
- Czy mogę dodać zarówno pliki, jak i całe katalogi? Tak – użyj pomocników
addFilesiaddDirectories, aby wczytać zawartość. - Jaka wersja Java jest wymagana? Java 8 lub wyższa, z Mavenem do zarządzania zależnościami.
- Jak działa indeksowanie w czasie rzeczywistym w java? Subskrybując zdarzenia węzła, możesz wywoływać automatyczne ponowne indeksowanie w miarę zmian plików.
Co to jest „create searchable index java”?
Tworzenie indeksu przeszukiwalnego w Javie oznacza budowanie struktury danych, która mapuje terminy na dokumenty je zawierające, umożliwiając szybkie zapytania pełnotekstowe. GroupDocs.Search for Java abstrahuje ciężką pracę, pozwalając skupić się na dostarczaniu dokumentów i dostrajaniu zachowania wyszukiwania.
Dlaczego używać GroupDocs.Search for Java?
GroupDocs.Search dostarcza silnik wyszukiwania java, który skaluje się poziomo, obsługuje ponad 50 formatów wejścia i wyjścia oraz oferuje indeksowanie sterowane zdarzeniami. Wdrożenie wielu węzłów rozkłada obciążenie indeksowania, a wbudowane kontrole zdrowia utrzymują sieć niezawodną. Zapewnia także interfejsy RESTful API oraz konfigurowalne analizatory dla precyzyjnie dopasowanej trafności.
Wymagania wstępne
- JDK 8+ zainstalowane na Twojej maszynie deweloperskiej.
- IDE, takie jak IntelliJ IDEA lub Eclipse.
- Podstawowa znajomość Java i Maven.
- Dostęp do biblioteki GroupDocs.Search for Java (pobranie lub Maven).
Konfiguracja GroupDocs.Search for Java
Zależność Maven
Dodaj repozytorium i zależność do swojego pom.xml:
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/search/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-search</artifactId>
<version>25.4</version>
</dependency>
</dependencies>
Pro tip: Utrzymuj numer wersji aktualny, sprawdzając oficjalną stronę wydań.
Możesz również pobrać plik JAR bezpośrednio z oficjalnej strony: GroupDocs.Search for Java releases.
Uzyskiwanie licencji
- Free trial: 30‑dniowa ocena.
- Temporary license: Prośba o przedłużone testowanie.
- Purchase: Wymagane przy wdrożeniach produkcyjnych.
Podstawowa inicjalizacja
Utwórz obiekt konfiguracji, który wskazuje folder, w którym będą przechowywane pliki indeksu i definiuje podstawowy port komunikacji:
import com.groupdocs.search.Configuration;
class InitializeSearch {
public static void main(String[] args) {
String basePath = "your/base/path";
int basePort = 8080;
Configuration config = new ConfiguringSearchNetwork().configure(basePath, basePort);
// Use this configuration for subsequent operations
}
}
Jak stworzyć indeks przeszukiwalny java z GroupDocs.Search?
Załaduj obiekt SearchConfiguration, uruchom SearchNetworkNode i wywołaj node.getIndexer().addFiles(...), aby wypełnić indeks. Ten jednowierszowy wzorzec uruchamia w pełni funkcjonalną sieć java full text search, gotową do przyjmowania zapytań od razu. Następnie możesz skalować, dodając kolejne węzły, które współdzielą tę samą ścieżkę bazową i zakres portów.
Funkcja 1 – konfiguracja i ustawienie sieci
Klasa SearchConfiguration zawiera wszystkie ustawienia niezbędne do uruchomienia węzła.
import com.groupdocs.search.Configuration;
import com.groupdocs.search.scaling.*;
class ConfiguringSearchNetwork {
public static Configuration configure(String basePath, int basePort) {
// Configure the search network with specified base path and port
return new Configuration(basePath, basePort);
}
}
basePath– Katalog, w którym będą przechowywane dane indeksu.basePort– Port początkowy; każdy węzeł będzie inkrementował od tej wartości.
Funkcja 2 – wdrażanie węzłów sieci wyszukiwania
SearchNetworkNode reprezentuje indywidualną usługę indeksowania, którą można uruchomić na dowolnym komputerze.
import com.groupdocs.search.scaling.*;
class SearchNetworkDeployment {
public static SearchNetworkNode[] deploy(String basePath, int basePort, Configuration configuration) {
// Deploy nodes based on the provided configuration
return new SearchNetworkNode[]{new SearchNetworkNode()};
}
}
SearchNetworkNode jest podstawowym komponentem uruchomieniowym, który hostuje indeks, przetwarza zdarzenia dodawania/usuwania i odpowiada na zapytania wyszukiwania. Wdrożenie wielu węzłów pozwala Ci create java full text search klasterów, które skalują się poziomo.
Funkcja 3 – subskrypcja zdarzeń węzła
Aktualizacje w czasie rzeczywistym utrzymują indeks zsynchronizowany ze zmianami w systemie plików.
import com.groupdocs.search.scaling.*;
class SearchNetworkNodeEvents {
public static void subscribe(SearchNetworkNode node) {
// Logic to subscribe to the specified node's events
}
}
Nasłuchując zdarzeń, możesz automatycznie wywoływać ponowne indeksowanie, gdy pojawią się nowe pliki, osiągając event driven indexing bez ręcznych skryptów.
Funkcja 4 – dodawanie katalogów do węzła sieciowego
Użyj tego pomocnika, aby add directories to node, rekurencyjnie zbierając wszystkie obsługiwane dokumenty.
import java.io.File;
import java.util.ArrayList;
class DirectoryAdder {
public static void addDirectories(SearchNetworkNode node, String... directoryPaths) {
ArrayList<String> files = new ArrayList<>();
for (String directoryPath : directoryPaths) {
final File folder = new File(directoryPath);
listFiles(folder, files);
}
addFiles(node, files.toArray(new String[0]));
}
private static void listFiles(final File folder, ArrayList<String> list) {
for (final File fileEntry : folder.listFiles()) {
if (fileEntry.isDirectory()) {
listFiles(fileEntry, list);
} else {
list.add(fileEntry.getPath());
}
}
}
}
Funkcja 5 – dodawanie plików do węzła sieciowego
Gdy potrzebujesz precyzyjnej kontroli, add files to search indywidualnie:
import com.groupdocs.search.Document;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import org.apache.commons.io.FilenameUtils;
import com.groupdocs.search.Indexer;
import com.groupdocs.search.options.*;
class FileAdder {
public static void addFiles(SearchNetworkNode node, String... filePaths) {
try {
InputStream[] streams = new FileInputStream[filePaths.length];
Document[] documents = new Document[filePaths.length];
for (int i = 0; i < filePaths.length; i++) {
String filePath = filePaths[i];
InputStream stream = new FileInputStream(filePath);
streams[i] = stream;
// Create a document from the input stream
String fileName = FilenameUtils.getName(filePath);
String extension = "." + FilenameUtils.getExtension(filePath);
Document document = Document.createFromStream(
fileName,
new Date(),
extension,
stream);
documents[i] = document;
}
// Initialize the indexer and configure options
Indexer indexer = node.getIndexer();
IndexingOptions options = new IndexingOptions();
options.setUseRawTextExtraction(false);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Typowe przypadki użycia
- Enterprise document portals które potrzebują natychmiastowego wyszukiwania wśród tysięcy plików PDF i Office.
- Legal e‑discovery platforms gdzie nowe dowody są ciągle dodawane i muszą być przeszukiwalne w czasie rzeczywistym.
- Content management systems które przechowują obrazy, prezentacje i arkusze kalkulacyjne i wymagają pełnotekstowego wyszukiwania.
Typowe problemy i rozwiązania
| Problem | Powód | Rozwiązanie |
|---|---|---|
| Brak dokumentów w wynikach wyszukiwania | Indeks nie został zatwierdzony | Wywołaj node.getIndexer().commit() po dodaniu plików. |
| Błąd konfliktu portu | Inna usługa używa basePort | Wybierz inny basePort lub sprawdź dostępność portów. |
| Nieobsługiwany format pliku | Biblioteka nie posiada parsera | Upewnij się, że rozszerzenie pliku jest obsługiwane lub dodaj własny ekstraktor. |
Wskazówki dotyczące rozwiązywania problemów
- Sprawdź stan węzła: Użyj wbudowanego punktu końcowego sprawdzania zdrowia (
http://localhost:{port}/health), aby potwierdzić, że każdy węzeł działa. - Monitoruj zużycie pamięci: Duże partie dokumentów mogą zwiększyć zużycie pamięci; indeksuj w mniejszych partiach i wywołuj
commit()okresowo. - Sprawdź logi: GroupDocs.Search zapisuje szczegółowe logi w folderze
basePath— przejrzyj je pod kątem błędów parsowania lub przekroczeń czasu sieci.
Najczęściej zadawane pytania
Q: Czy mogę używać GroupDocs.Search w aplikacji Java działającej w chmurze?
A: Tak. Biblioteka działa z dowolnym środowiskiem uruchomieniowym Java, a basePath możesz skierować do folderu zamontowanego sieciowo lub do montowania przechowywania w chmurze.
Q: Jak zaktualizować indeks, gdy plik się zmieni?
A: Subskrybuj zdarzenia węzła (zobacz Funkcję 3) i ponownie wywołaj addFiles lub addDirectories dla zmodyfikowanych ścieżek.
Q: Czy istnieje limit liczby węzłów, które mogę wdrożyć?
A: Praktycznie limit jest określony przez Twój sprzęt i przepustowość sieci. API nie narzuca sztywnego limitu.
Q: Czy muszę restartować węzły po dodaniu nowych plików?
A: Nie. Dodawanie plików wyzwala indeksowanie automatycznie; musisz jedynie wykonać commit, jeśli odraczysz operację.
Q: Jakie formaty dokumentów są obsługiwane od razu?
A: PDF, DOC/DOCX, XLS/XLSX, PPT/PPTX, TXT, HTML oraz wiele typów obrazów — ponad 50 formatów łącznie.
Q: Jak mogę włączyć indeksowanie w czasie rzeczywistym java dla folderu, który ciągle otrzymuje przesyłane pliki?
A: Zaimplementuj obserwatora systemu plików (np. java.nio.file.WatchService), który wywołuje DirectoryAdder.addDirectories(node, path) za każdym razem, gdy wykryty zostanie nowy plik.
Ostatnia aktualizacja: 2026-09-27
Testowano z: GroupDocs.Search for Java 25.4
Autor: GroupDocs