Wyszukiwanie po atrybucie java z przewodnikiem GroupDocs.Search
W nowoczesnych aplikacjach skoncentrowanych na dokumentach często trzeba lokalizować pliki nie tylko na podstawie ich treści tekstowej, ale także przy użyciu niestandardowych metadanych, takich jak dział, poziom poufności czy data utworzenia. Search by attribute java daje taką możliwość w jednej, wysokowydajnej kwerendzie. W tym samouczku zobaczysz, jak wsadowo aktualizować atrybuty w już zaindeksowanych plikach, wstrzykiwać atrybuty podczas indeksowania oraz efektywnie wyszukiwać dokumenty po metadanych przy użyciu biblioteki GroupDocs.Search for Java.
Szybkie odpowiedzi
- Czym jest „search by attribute java”? Umożliwia filtrowanie wyników wyszukiwania przy użyciu metadanych klucz‑wartość dołączonych do każdego zindeksowanego dokumentu.
- Czy mogę modyfikować atrybuty po indeksowaniu? Tak – użyj
AttributeChangeBatch, aby zastosować zmiany masowe bez przebudowy całego indeksu. - Jak dodać atrybuty podczas indeksowania? Zarejestruj obsługę zdarzenia
FileIndexingi ustawiaj atrybuty programowo dla każdego pliku. - Czy potrzebna jest licencja? Darmowa wersja próbna wystarcza do oceny; stała licencja jest wymagana w środowiskach produkcyjnych.
- Jaka wersja Java jest wymagana? Zalecana jest Java 8 lub nowsza.
Czym jest „search by attribute java”?
Search by attribute java umożliwia zapytania o dokumenty na podstawie niestandardowych metadanych (atrybutów), a nie tylko ich treści tekstowej. Takie podejście drastycznie zmniejsza zestawy wyników, redukuje ruch sieciowy i przyspiesza czasy odpowiedzi, ponieważ silnik ocenia filtry atrybutów przed wykonaniem pełnotekstowego skanowania.
Dlaczego używać dynamicznego tagowania metadanych?
Dynamiczne tagowanie metadanych pozwala przypisywać, aktualizować i zarządzać niestandardowymi atrybutami dokumentów bez ponownego indeksowania, zapewniając elastyczną klasyfikację dostosowującą się do zmieniających się reguł biznesowych, zwiększającą efektywność wyszukiwania i zmniejszającą potrzebę kosztownych migracji danych w dużych repozytoriach przy jednoczesnym zachowaniu zgodności i możliwości audytu.
- Dynamiczna kategoryzacja – utrzymuj metadane w synchronizacji z ewoluującymi regułami biznesowymi.
- Szybsze filtrowanie – filtry atrybutów są oceniane przed wyszukiwaniem pełnotekstowym, co przyspiesza czasy odpowiedzi.
- Śledzenie zgodności – taguj dokumenty zgodnie z politykami retencji lub wymaganiami audytu.
- Masowa aktualizacja atrybutów – zmień wiele dokumentów w jednej operacji bez ponownego indeksowania wszystkiego.
Prerequisites
- Java 8+ (JDK 8 lub nowszy)
- Biblioteka GroupDocs.Search for Java (zobacz konfigurację Maven poniżej)
- Podstawowa znajomość kolekcji Java i obsługi wyjątków
Konfiguracja GroupDocs.Search dla Java
Konfiguracja Maven
Dodaj repozytorium GroupDocs oraz zależność do swojego pom.xml:
<repositories>
<repository>
<id>groupdocs-releases</id>
<url>https://repo.groupdocs.com/maven</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-search</artifactId>
<version>25.4</version>
</dependency>
</dependencies>
Bezpośrednie pobranie
Alternatywnie pobierz najnowszą wersję z GroupDocs.Search for Java releases. Jeśli nie chcesz używać Maven, pobierz plik JAR z GroupDocs website.
Uzyskanie licencji
- Rozpocznij od darmowej wersji próbnej, aby poznać możliwości.
- W przypadku dłuższego użytkowania, uzyskaj tymczasową lub pełną licencję poprzez stronę licencyjną.
Podstawowa inicjalizacja
// Initialize the search index folder
String indexFolder = "C:/search_index";
Index index = new Index(indexFolder);
// Apply license if you have one
License license = new License();
license.setLicense("C:/licenses/groupdocs.lic");
Jak modyfikować atrybuty dokumentów (aktualizacja wsadowa)
Aby zmodyfikować atrybuty dokumentów po ich zaindeksowaniu, możesz użyć API AttributeChangeBatch, aby zastosować aktualizacje zbiorcze. To podejście aktualizuje metadane wybranych plików w jednej transakcji, unikając kosztów ponownego indeksowania całej kolekcji i zachowując integralność indeksu pełnotekstowego.
Direct answer: Use AttributeChangeBatch to group additions, deletions, or replacements of metadata into a single atomic operation, then commit the batch to the index. This updates the attributes of many documents in one pass while preserving the existing full‑text index.
Krok 1: dodaj dokumenty do indeksu
index.add("C:/docs/contract1.pdf");
index.add("C:/docs/report2.docx");
Krok 2: pobierz informacje o zindeksowanych dokumentach
DocumentInfo info = index.getDocumentInfo("contract1.pdf");
System.out.println("Current attributes: " + info.getAttributes());
Krok 3: masowa aktualizacja atrybutów dokumentów
Klasa AttributeChangeBatch grupuje wiele modyfikacji atrybutów w jedną operację atomową, zmniejszając obciążenie I/O i zapewniając spójność indeksu.
AttributeChangeBatch batch = new AttributeChangeBatch();
batch.addAttribute("contract1.pdf", "department", "Legal");
batch.removeAttribute("report2.docx", "confidential");
batch.replaceAttribute("report2.docx", "status", "archived", "active");
index.applyAttributeChanges(batch);
Krok 4: wyszukiwanie z filtrami atrybutów
SearchOptions options = new SearchOptions();
options.addAttributeFilter("department", "Legal");
SearchResult result = index.search("agreement", options);
System.out.println("Found " + result.getCount() + " legal documents.");
Jak dodać atrybuty podczas indeksowania
Dodawanie atrybutów w trakcie procesu indeksowania zapewnia, że każdy dokument jest od razu wzbogacony o niezbędne metadane. Obsługując zdarzenie FileIndexing, możesz programowo dołączać pary klucz‑wartość do każdego obiektu DocumentInfo przed przetworzeniem pliku przez silnik, co gwarantuje spójną dostępność atrybutów w późniejszych wyszukiwaniach.
Direct answer: Subscribe to the FileIndexing event before adding files; in the event handler, call addAttribute on the DocumentInfo object to attach key‑value pairs, then let the index continue processing the file.
Krok 1: subskrybuj zdarzenie FileIndexing
Zdarzenie FileIndexing jest wywoływane dla każdego pliku w momencie jego dodawania do indeksu, co pozwala wstrzyknąć niestandardowe metadane.
index.getEvents().FileIndexing.add(event -> {
// Example: set department based on folder name
String folder = new File(event.getFilePath()).getParentFile().getName();
event.getDocumentInfo().addAttribute("department", folder);
});
Krok 2: indeksuj dokumenty
index.add("C:/incoming/hr/policy.pdf");
index.add("C:/incoming/finance/budget.xlsx");
Praktyczne zastosowania
- Systemy zarządzania dokumentami – automatyczne tagowanie plików przy wprowadzaniu, umożliwiające natychmiastową nawigację po fasetach.
- Duże archiwa treści – łączenie filtrów atrybutów z wyszukiwaniem pełnotekstowym, aby skrócić czas zapytania z minut do sekund w kolekcjach wielogigabajtowych.
- Zgodność i raportowanie – dynamiczne przypisywanie okresów retencji, poziomów poufności lub flag audytowych, które można wyszukiwać w celu kontroli regulacyjnych.
Rozważania dotyczące wydajności
- Zarządzanie pamięcią – monitoruj stertę JVM i dostosuj
-Xmx(np.-Xmx4gdla indeksów większych niż 2 GB). - Przetwarzanie wsadowe – grupuj zmiany atrybutów przy użyciu
AttributeChangeBatch, aby zminimalizować zapisy na dysku; dziel partie większe niż 10 000 modyfikacji, aby uniknąć timeoutów transakcji. - Aktualizacje biblioteki – korzystaj z najnowszej wersji GroupDocs.Search; wersja 25.4 dodaje 30 % przyspieszenia oceny filtrów atrybutów w porównaniu do 24.x.
Typowe problemy i rozwiązania
| Problem | Dlaczego się pojawia | Jak naprawić |
|---|---|---|
| Atrybuty nie zastosowano | Obsługa zdarzenia nie została zarejestrowana przed indeksowaniem | Upewnij się, że index.getEvents().FileIndexing.add(...) jest wywoływane przed jakimikolwiek wywołaniami index.add(...). |
| Wyszukiwanie nie zwraca wyników | Niezgodność nazwy atrybutu (wrażliwość na wielkość liter) | Używaj dokładnych nazw atrybutów przy tworzeniu filtrów (createAttribute("main")). |
| Błędy braku pamięci przy dużych partiach | Zbyt wiele zmian w jednej partii | Podziel duże aktualizacje na mniejsze instancje AttributeChangeBatch (np. 5 000 dokumentów na partię). |
| Licencja nie rozpoznana | Używanie wersji próbnej JAR bez zastosowania pliku licencji | Wywołaj License license = new License(); license.setLicense("path/to/license.file"); przed jakąkolwiek operacją indeksu. |
Najczęściej zadawane pytania
Q: Jakie są wymagania wstępne do używania GroupDocs.Search w Javie?
A: Java 8+, biblioteka GroupDocs.Search oraz podstawowa znajomość koncepcji indeksowania.
Q: Jak zainstalować GroupDocs.Search za pomocą Maven?
A: Dodaj repozytorium i zależność pokazane w sekcji konfiguracji Maven do swojego pom.xml.
Q: Czy mogę modyfikować atrybuty po zaindeksowaniu dokumentów?
A: Tak, użyj AttributeChangeBatch, aby wsadowo aktualizować atrybuty dokumentów bez ponownego indeksowania.
Q: Co zrobić, gdy proces indeksowania jest wolny?
A: Optymalizuj pamięć JVM (-Xmx), używaj aktualizacji wsadowych i zaktualizuj bibliotekę do najnowszej wersji, aby skorzystać z poprawek wydajności.
Q: Gdzie mogę znaleźć więcej zasobów dotyczących GroupDocs.Search dla Java?
A: Odwiedź official documentation lub przeglądaj fora społeczności.
Zasoby
- Dokumentacja: GroupDocs.Search for Java Docs
- Referencja API: API Reference
- Pobierz: Latest Releases
- GitHub: GitHub GroupDocs.Search
- Bezpłatne forum wsparcia: GroupDocs Forums
- Tymczasowa licencja: License Page
Last Updated: 2026-09-21
Testowane z: GroupDocs.Search 25.4 for Java
Autor: GroupDocs
<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>
import com.groupdocs.search.Index;
// Initialize an index in a specified directory
Index index = new Index("YOUR_OUTPUT_DIRECTORY/ChangeAttributes");
index.add("YOUR_DOCUMENT_DIRECTORY");
import com.groupdocs.search.results.DocumentInfo;
DocumentInfo[] documents = index.getIndexedDocuments();
import com.groupdocs.search.common.AttributeChangeBatch;
import com.groupdocs.search.SearchOptions;
AttributeChangeBatch batch = new AttributeChangeBatch();
batch.addToAll("public"); // Add 'public' to all documents
batch.remove(documents[0].getFilePath(), "public"); // Remove 'public' from a specific document
batch.add(documents[0].getFilePath(), "main", "key"); // Add 'main' and 'key' attributes
// Apply changes
index.changeAttributes(batch);
import com.groupdocs.search.results.SearchResult;
SearchOptions options = new SearchOptions();
options.setSearchDocumentFilter(SearchDocumentFilter.createAttribute("main"));
String query = "length";
SearchResult result = index.search(query, options); // Perform the search
import com.groupdocs.search.events.EventHandler;
import com.groupdocs.search.events.FileIndexingEventArgs;
index.getEvents().FileIndexing.add(new EventHandler<FileIndexingEventArgs>() {
@Override
public void invoke(Object sender, FileIndexingEventArgs args) {
if (args.getDocumentFullPath().endsWith("SampleDocument.pdf")) {
args.setAttributes(new String[] { "main", "key" });
}
}
});
index.add("YOUR_DOCUMENT_DIRECTORY");