package org.infinispan.test.integration.as.query;
import java.util.List;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.lucene.search.Query;
import org.hibernate.search.query.dsl.QueryBuilder;
import org.infinispan.Cache;
import org.infinispan.context.Flag;
import org.infinispan.query.CacheQuery;
import org.infinispan.query.Search;
import org.infinispan.query.SearchManager;
@Named
@ApplicationScoped
public class GridService {
@Inject
private Cache<String, Book> bookshelf;
public void store(String isbn, Book book, boolean index) {
if (index) {
bookshelf.put(isbn, book);
}
else {
bookshelf.getAdvancedCache().withFlags(Flag.SKIP_INDEXING).put(isbn, book);
}
}
public Book findById(String isbn) {
return bookshelf.get(isbn);
}
public List<Book> findFullText(String phrase) {
SearchManager sm = Search.getSearchManager(bookshelf);
QueryBuilder queryBuilder = sm.buildQueryBuilderForClass(Book.class).get();
Query query = queryBuilder
.phrase()
.onField("title")
.sentence(phrase)
.createQuery();
CacheQuery<Book> cacheQuery = sm.getQuery(query);
return cacheQuery.list();
}
public List<Book> findByPublisher(String publisher) {
org.infinispan.query.dsl.Query query = Search.getQueryFactory(bookshelf)
.from(Book.class)
.having("publisher")
.eq(publisher)
.build();
return query.list();
}
public void clear() {
bookshelf.clear();
}
public void rebuildIndexes() {
Search.getSearchManager(bookshelf).getMassIndexer().start();
}
}