Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Do wyszukiwania dokumentów należy używać klasy DocumentFinder

Code Block
languagejava
titlePodstawowe wyszukiwanie dokumentów
linenumberstrue
		DocumentFinder documentFinder=FinderFactory.getDocumentFinder();		
 
		Map<Long, Object> idx = new HashMap<Long, Object>();
        idx.put( 1L, "wartość tekstowa" );
        idx.put( 2L, 555 );
        idx.put( 3L, new Date() );//wartości indeksów po których chcemy wyszukiwać
        List<Sorter> sorters=new ArrayList<Sorter>();
        sorters.add( new Sorter("3",SortDirection.DESC) );//sorujemy malejąco po indeksie o id 3
        CountedResult<WfDocument> result=documentFinder.findByIndexes( idx, sorters, documentClassId, start, limit );
        long total=result.getTotal();//liczba wszystkich pasujących dokumentów
        List<WfDocument> documents=result.getData();//lista znalezionych dokumentów ograniczona przez start i limit

Przedstawiona wyżej metoda wyszukuje dokumenty o indeksach równych (operator '=' )  podanym wartościom i wszystkie warunki łączy operatorem logicznym AND. Jeżeli chcemy stworzyć bardziej zaawansowane warunki wyszukiwania możemy wykorzystać następującą metodę:

Code Block
languagejava
titleZaawansowane wyszukiwanie (1)
		DocumentFinder documentFinder = FinderFactory.getDocumentFinder();

        List<IndexFilter> filters = new ArrayList<IndexFilter>();
        filters.add( new SimpleIndexFilter( 3L, date, FilterOperator.GT ) );//Greater then
        filters.add( new SimpleIndexFilter( 1L, "%test%", FilterOperator.LIKE ) );//definiujemy operatory wyszukiwania 
        CountedResult<WfDocument> result = documentFinder.findByIndexes( filters, sorters, documentClassId, start, limit );

W powyższym przykładzie zdefiniowaliśmy operatory wyszukiwania, lecz warunki nadal są połączone logicznym operatorem AND. Aby to zmienić możemy wykorzystać grupowanie filtrów:

Code Block
languagejava
titleGrupowanie filtrów
linenumberstrue
 		List<IndexFilter> filters = new ArrayList<IndexFilter>();
        GroupIndexFilter gif = new GroupIndexFilter( LogicOperator.OR );//tworzymy grupę warunków połączonych operatorem OR
        gif.addFilter( new SimpleIndexFilter( 3L, date, FilterOperator.GT ) );
        gif.addFilter( new SimpleIndexFilter( 1L, "%test%", FilterOperator.LIKE ) );
        
        GroupIndexFilter subGroup=new GroupIndexFilter(LogicOperator.AND);// tworzymy kolejną grupę warunków
        subGroup.addFilter( new SimpleIndexFilter( 5L, "abc") );
        subGroup.addFilter( new SimpleIndexFilter( 2L, 555 ) );
        gif.addFilter( subGroup );//do grupy warunków możmy dodać inną grupę tworząc drzewo warunków
        
        filters.add( gif );
        CountedResult<WfDocument> result = documentFinder.findByIndexes( filters, sorters, documentClassId, start, limit );

Powyższy przykład utworzy następujący warunek: idx_3 = date OR idx_1 = '%test' OR ( idx_5 = 'abc' AND idx_2 = 555 )