From 919231055d97203d8f4b41858814f24e679f09d0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?D=C3=A9nes=20Horv=C3=A1th?= Date: Fri, 4 Oct 2019 14:17:21 +0000 Subject: [PATCH] Search using Lucene indexer git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31561 --- server/-dependencies/jobengine.target | 1 + .../indexer-build.launch | 1 - .../mediacube/indexer/RESTController.java | 28 ++-- .../mediacube/indexer/db/ArchivedMedia.java | 34 +++++ .../user/mediacube/indexer/db/EntityBase.java | 105 +++++++++++++++ .../mediacube/indexer/db/IEntityBase.java | 56 ++++++++ .../indexer/db/IEntityPersister.java | 40 ++++++ .../hu/user/mediacube/indexer/db/Item.java | 101 ++++++++++++++ .../hu/user/mediacube/indexer/db/Media.java | 124 ++++++++++++++++++ .../mediacube/indexer/db/SearchResult.java | 25 ++++ .../indexer/db/TimestampAdapter.java | 18 +++ .../indexer/lucene/LuceneIndexer.java | 76 +++++++++-- .../META-INF/MANIFEST.MF | 7 +- .../user/jobengine/db/LuceneMediaFinder.java | 27 +++- .../user/jobengine/server/IT/SupportTest.java | 25 +++- 15 files changed, 631 insertions(+), 37 deletions(-) create mode 100644 server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/ArchivedMedia.java create mode 100644 server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/EntityBase.java create mode 100644 server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/IEntityBase.java create mode 100644 server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/IEntityPersister.java create mode 100644 server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/Item.java create mode 100644 server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/Media.java create mode 100644 server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/SearchResult.java create mode 100644 server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/TimestampAdapter.java diff --git a/server/-dependencies/jobengine.target b/server/-dependencies/jobengine.target index 149ffe1f..b986b075 100644 --- a/server/-dependencies/jobengine.target +++ b/server/-dependencies/jobengine.target @@ -12,6 +12,7 @@ + diff --git a/server/hu.user.mediacube.indexer/indexer-build.launch b/server/hu.user.mediacube.indexer/indexer-build.launch index c079b63d..cfec8907 100644 --- a/server/hu.user.mediacube.indexer/indexer-build.launch +++ b/server/hu.user.mediacube.indexer/indexer-build.launch @@ -12,7 +12,6 @@ - diff --git a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/RESTController.java b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/RESTController.java index 1bddf96c..41d3d1d1 100644 --- a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/RESTController.java +++ b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/RESTController.java @@ -1,7 +1,5 @@ package hu.user.mediacube.indexer; -import java.util.List; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -12,7 +10,8 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import hu.user.mediacube.indexer.db.IndexerDescription; +import hu.user.mediacube.indexer.db.ArchivedMedia; +import hu.user.mediacube.indexer.db.SearchResult; import hu.user.mediacube.indexer.lucene.LuceneIndexer; @RestController @@ -21,18 +20,19 @@ public class RESTController { private static Logger logger = LoggerFactory.getLogger(RESTController.class); - // @Configuration - // public class JacksonConfiguration { + // @Configuration + // public class JacksonConfiguration { // - // @Bean - // public ObjectMapper objectMapper() { - // ObjectMapper mapper = new ObjectMapper(); - // mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - // mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true); + // @Bean + // public ObjectMapper objectMapper() { + // ObjectMapper mapper = new ObjectMapper(); + // mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, + // false); + // mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true); // - // return mapper; - // } - // } + // return mapper; + // } + // } @Autowired GreetingService greetingService; @@ -59,7 +59,7 @@ public class RESTController { } @GetMapping(path = "/search/{queryString}/{skipRecords}/{takeRecords}/{orderIndex}/{orderDirection}", produces = "application/json") - public List search(@PathVariable String queryString, @PathVariable int skipRecords, @PathVariable int takeRecords, + public SearchResult search(@PathVariable String queryString, @PathVariable int skipRecords, @PathVariable int takeRecords, @PathVariable int orderIndex, @PathVariable int orderDirection) { return indexer.search(queryString, skipRecords, takeRecords, orderIndex, orderDirection); } diff --git a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/ArchivedMedia.java b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/ArchivedMedia.java new file mode 100644 index 00000000..f2cf32e5 --- /dev/null +++ b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/ArchivedMedia.java @@ -0,0 +1,34 @@ +package hu.user.mediacube.indexer.db; + +import java.io.Serializable; + +public class ArchivedMedia implements Serializable { + private static final long serialVersionUID = 1L; + private Item item; + private Media media; + private String relevant; + + public Item getItem() { + return item; + } + + public Media getMedia() { + return media; + } + + public String getRelevant() { + return relevant; + } + + public void setItem(Item item) { + this.item = item; + } + + public void setMedia(Media media) { + this.media = media; + } + + public void setRelevant(String relevant) { + this.relevant = relevant; + } +} diff --git a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/EntityBase.java b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/EntityBase.java new file mode 100644 index 00000000..8620a465 --- /dev/null +++ b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/EntityBase.java @@ -0,0 +1,105 @@ +package hu.user.mediacube.indexer.db; + +import org.apache.ibatis.javassist.bytecode.SignatureAttribute.BaseType; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class EntityBase implements IEntityBase { + protected final static Logger logger = LogManager.getLogger(); + protected long id; + protected IEntityPersister persister; + + @Override + public void add() { + if (persister != null) + persister.add(this); + else { + throw new NullPointerException("Persister cannot be null!"); + } + } + + protected void checkParameter(String name, BaseType type) { + if (type == null) + throw new NullPointerException(name + " cannot be null."); + } + + void checkParameter(String name, double parameter) { + if (parameter == 0) + throw new IllegalArgumentException(name + " cannot be 0."); + } + + protected void checkParameter(String name, IEntityBase entity) { + checkParameter(name, entity, false); + } + + protected void checkParameter(String name, IEntityBase entity, boolean nonZero) { + if (entity == null) + throw new NullPointerException(name + " cannot be null."); + if (nonZero == true) { + if (entity.getId() != 0) + throw new IllegalArgumentException("Appending " + name + " with non 0 ID is prohibited."); + } else { + if (entity.getId() == 0) + throw new IllegalArgumentException(name + " ID cannot be 0."); + } + } + + public void checkParameter(String name, long parameter) { + checkParameter(name, parameter, false); + } + + @Override + public void checkParameter(String name, long parameter, boolean nonZero) { + if (nonZero == true) { + if (parameter != 0) + throw new IllegalArgumentException(name + " must be 0."); + } else { + if (parameter == 0) + throw new IllegalArgumentException(name + " cannot be 0."); + } + } + + protected void checkParameter(String name, String parameter) { + if (parameter == null) + throw new NullPointerException(name + " cannot be null."); + if (parameter.trim().equals("")) + throw new IllegalArgumentException(name + " cannot be empty."); + } + + @Override + public long getId() { + return id; + } + + @Override + public void modify() { + if (persister != null) + persister.modify(this); + else { + throw new NullPointerException("Persister cannot be null!"); + } + + } + + @Override + public void remove() { + if (persister != null) + persister.remove(this); + else { + throw new NullPointerException("Persister cannot be null!"); + } + } + + @Override + public void setId(long id) { + this.id = id; + } + + @Override + public void setPersister(IEntityPersister persister) { + this.persister = persister; + } + /* + * @Override public int compareTo(Object arg0) { return 0; } + */ +} \ No newline at end of file diff --git a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/IEntityBase.java b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/IEntityBase.java new file mode 100644 index 00000000..e5a09ae2 --- /dev/null +++ b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/IEntityBase.java @@ -0,0 +1,56 @@ +package hu.user.mediacube.indexer.db; + +/** + * Az adatb�zis modell entit�sok alap olyt�lya. + * + * @author User + * + * Ahol erre szukseg van ott ezek a beanek inkabb implementaljak + * maguknak a Comparable interfacet + * extends Comparable + * + */ +public interface IEntityBase { + void setPersister(IEntityPersister persister); + + /** + * Az adatb�zisban l�trehoz egy �j entit�st. + */ + void add(); + + /** + * Visszaadja az entit�s azonos�t�j�t + * + * @return long azonos�t� + */ + long getId(); + + /** + * Az adatb�zisban m�dos�t egy m�r l�tez� objektumot. + */ + void modify(); + + /** + * Az adatb�zisb�l elt�vol�t egy objektumot. + */ + void remove(); + + /** + * A kapott id alapj�n be�ll�tja az entit�s azonos�t�j�t. + * + * @param id + */ + void setId(long id); + + /** + * A bementi param�tert ellen�rzi le. Amennyiben a nonZero igaz, akkor a + * param�ternek null�nak kell lenni, Ha nonZero hamis, akkor a param�ternek + * null�t�l k�l�nb�z�nek kell lenni. + * + * @param name + * @param parameter + * @param nonZero + * @throws IllegalArgumentException + */ + void checkParameter(String name, long parameter, boolean nonZero); +} \ No newline at end of file diff --git a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/IEntityPersister.java b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/IEntityPersister.java new file mode 100644 index 00000000..f3780bae --- /dev/null +++ b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/IEntityPersister.java @@ -0,0 +1,40 @@ +package hu.user.mediacube.indexer.db; + +public interface IEntityPersister { + + /*** + * Az adatb�zisban l�trehoz egy �j entit�st + * + * @param entity + * Perziszt�land� objektum + */ + void add(IEntityBase entity); + + /*** + * Elk�r az adatb�zisb�l egy objektumot + * + * @param classInfo + * Az objektum t�pusa + * @param id + * Egyedi azonos�t� + * @return Perziszt�lt objektum p�ld�ny + */ + IEntityBase get(Class classInfo, long id); + + /*** + * Az adatb�zisban m�dos�t egy m�r l�tez� objektumot + * + * @param entity + * A perziszt�land� objektum + */ + void modify(IEntityBase entity); + + /*** + * Elt�vol�t egy objektumot az adatb�zisb�l + * + * @param entity + * Az elt�vol�tand� objektum + */ + void remove(IEntityBase entity); + +} diff --git a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/Item.java b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/Item.java new file mode 100644 index 00000000..ab1512bb --- /dev/null +++ b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/Item.java @@ -0,0 +1,101 @@ +package hu.user.mediacube.indexer.db; + +import java.io.Serializable; +import java.sql.Timestamp; + +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + +/** + * Anyag Pojo osztály. + * + * @author User + * + */ +public class Item extends EntityBase implements Serializable { + private static final long serialVersionUID = 1L; + private Timestamp created = null; + private Timestamp modified = null; + private String description = null; + private String houseId = null; + // private List medias = null; + private String title = null; + private boolean isFolder = false;; + private Long folderId = null; + + // public void appendMedia(Media media) { + // checkParameter("Media", media, true); + // if (getMedias() == null) + // setMedias(new ArrayList()); + // getMedias().add(media); + // } + + @XmlJavaTypeAdapter(TimestampAdapter.class) + public Timestamp getCreated() { + return created; + } + + public String getDescription() { + return description; + } + + public Long getFolderId() { + return folderId; + } + + public String getHouseId() { + return houseId; + } + + public boolean getIsFolder() { + return isFolder; + } + + @SuppressWarnings("unchecked") + // public List getMedias() { + // if (medias == null) { + // MediaDAO dao = (MediaDAO) + // ItemManager.getInstance().getBaseDAO(Media.class); + // medias = (List) (List) dao.getAll(getId()); + // } + // return medias; + // } + + @XmlJavaTypeAdapter(TimestampAdapter.class) + public Timestamp getModified() { + return modified; + } + + public String getTitle() { + return title; + } + + public void setCreated(Timestamp created) { + this.created = created; + } + + public void setDescription(String description) { + // checkParameter("Description", description); + this.description = description; + } + + public void setFolderId(Long folderId) { + this.folderId = folderId; + } + + public void setHouseId(String houseId) { + this.houseId = houseId; + } + + public void setIsFolder(boolean isFolder) { + this.isFolder = isFolder; + } + + public void setModified(Timestamp modified) { + this.modified = modified; + } + + public void setTitle(String title) { + // checkParameter("Title", title); + this.title = title; + } +} \ No newline at end of file diff --git a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/Media.java b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/Media.java new file mode 100644 index 00000000..a0727fa5 --- /dev/null +++ b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/Media.java @@ -0,0 +1,124 @@ +package hu.user.mediacube.indexer.db; + +import java.io.Serializable; +import java.sql.Timestamp; + +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + +/** + * Medi Pojo osztaly. + * + * @author User + * + */ +public class Media extends EntityBase implements Serializable { + private static final long serialVersionUID = 1L; + private Timestamp archived = null; + private Timestamp created = null; + private String description = null; + private String houseId = null; + private long itemId = 0; + private long length = 0; + private String title = null; + private boolean isPartialEnabled; + private byte[] poster = null; + // private String mediaFilesName; + private int mediaFilesCount = -1; + + @XmlJavaTypeAdapter(TimestampAdapter.class) + public Timestamp getArchived() { + return this.archived; + } + + @XmlJavaTypeAdapter(TimestampAdapter.class) + public Timestamp getCreated() { + return created; + } + + public String getDescription() { + return description; + } + + public String getHouseId() { + return this.houseId; + } + + public boolean getIsPartialEnabled() { + return isPartialEnabled; + } + + public long getItemId() { + return this.itemId; + } + + public long getLength() { + return this.length; + } + + // @JsonIgnore + // public String getMediaFilesName() { + // if (mediaFilesName == null) { + // List files = getMediaFiles(); + // if (files != null && files.size() > 0) { + // for (MediaFile mf : files) { + // mediaFilesName = mf.getHouseId(); + // if (mediaFilesName != null) + // break; + // } + // } + // } + // + // return mediaFilesName; + // } + + public byte[] getPoster() { + return poster; + } + + public String getTitle() { + return title; + } + + public void setArchived(Timestamp archived) { + this.archived = archived; + } + + public void setCreated(Timestamp created) { + this.created = created; + } + + public void setDescription(String description) { + // checkParameter("Description", description); + this.description = description; + } + + public void setHouseId(String id) { + houseId = id; + } + + public void setIsPartialEnabled(boolean isPartialEnabled) { + this.isPartialEnabled = isPartialEnabled; + } + + public void setItemId(long itemId) { + // checkParameter("ItemId", itemId); + this.itemId = itemId; + } + + public void setLength(long length) { + this.length = length; + } + + // public void setMediaFilesName(String mediaFilesName) { + // this.mediaFilesName = mediaFilesName; + // } + + public void setPoster(byte[] poster) { + this.poster = poster; + } + + public void setTitle(String title) { + checkParameter("Title", title); + this.title = title; + } +} \ No newline at end of file diff --git a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/SearchResult.java b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/SearchResult.java new file mode 100644 index 00000000..9e58dcdd --- /dev/null +++ b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/SearchResult.java @@ -0,0 +1,25 @@ +package hu.user.mediacube.indexer.db; + +import java.util.List; + +public class SearchResult { + + private long itemCount; + private List items; + + public long getItemCount() { + return this.itemCount; + } + + public List getItems() { + return this.items; + } + + public void setItemCount(long itemCount) { + this.itemCount = itemCount; + } + + public void setItems(List items) { + this.items = items; + } +} \ No newline at end of file diff --git a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/TimestampAdapter.java b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/TimestampAdapter.java new file mode 100644 index 00000000..9728f0f2 --- /dev/null +++ b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/db/TimestampAdapter.java @@ -0,0 +1,18 @@ +package hu.user.mediacube.indexer.db; + +import java.sql.Timestamp; +import java.util.Date; +import javax.xml.bind.annotation.adapters.XmlAdapter; + +public class TimestampAdapter + extends XmlAdapter { + + public Date marshal(Timestamp v) { + return new Date(v.getTime()); + } + + public Timestamp unmarshal(Date v) { + return new Timestamp( + v.getTime()); + } +} \ No newline at end of file diff --git a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/lucene/LuceneIndexer.java b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/lucene/LuceneIndexer.java index 9bb84696..6cdafd03 100644 --- a/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/lucene/LuceneIndexer.java +++ b/server/hu.user.mediacube.indexer/src/main/java/hu/user/mediacube/indexer/lucene/LuceneIndexer.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import javax.annotation.PostConstruct; @@ -21,6 +22,7 @@ import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; +import org.apache.lucene.index.IndexableField; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; @@ -41,20 +43,24 @@ import org.springframework.stereotype.Component; import org.springframework.util.FileSystemUtils; import hu.user.mediacube.indexer.JsonProperties; +import hu.user.mediacube.indexer.db.ArchivedMedia; import hu.user.mediacube.indexer.db.IndexerDescription; +import hu.user.mediacube.indexer.db.Item; +import hu.user.mediacube.indexer.db.Media; +import hu.user.mediacube.indexer.db.SearchResult; @Component public class LuceneIndexer { private static Logger logger = LoggerFactory.getLogger(LuceneIndexer.class); private static final String DESCRIPTION = "description"; - // private static Field[] fields; - // static { - // FieldType TYPE = new FieldType(); - // TYPE.setDocValuesType(DocValuesType.SORTED_NUMERIC); - // TYPE.freeze(); + // private static Field[] fields; + // static { + // FieldType TYPE = new FieldType(); + // TYPE.setDocValuesType(DocValuesType.SORTED_NUMERIC); + // TYPE.freeze(); // - // fields={new Field("itemId","",TYPE)}; - // } + // fields={new Field("itemId","",TYPE)}; + // } @Autowired private JsonProperties config; private Directory directoryIndex; @@ -82,6 +88,46 @@ public class LuceneIndexer { indexWritter.commit(); } + public ArchivedMedia createArchivedMedia(Document doc, String highlight) { + ArchivedMedia ret = new ArchivedMedia(); + + Iterator iterator = doc.iterator(); + Item item = new Item(); + Media media = new Media(); + item.setDescription(highlight); + while (iterator.hasNext()) { + IndexableField field = iterator.next(); + switch (field.name()) { + case "mediaId": { + media.setId((Long) field.numericValue()); + break; + } + case "itemTitle": { + item.setTitle(field.stringValue()); + break; + } + case "mediaTitle": { + media.setTitle(field.stringValue()); + break; + } + case "mediaHouseId": { + media.setHouseId(field.stringValue()); + break; + } + case "length": { + media.setLength((Long) field.numericValue()); + break; + } + } + + ret.setItem(item); + ret.setMedia(media); + ret.setRelevant(highlight); + } + + return ret; + } + public void index(IndexerDescription indexerDescription) throws IOException { Document document = new Document(); addLong(document, "itemId", indexerDescription.getItemId()); @@ -106,8 +152,9 @@ public class LuceneIndexer { start(); } - public List search(String queryString, int skipRecords, int takeRecords, int orderIndex, int orderDirection) { - List ret = new ArrayList<>(); + public SearchResult search(String queryString, int skipRecords, int takeRecords, int orderIndex, int orderDirection) { + SearchResult ret = new SearchResult(); + List mediaList = new ArrayList(); IndexReader indexReader = null; IndexSearcher searcher = null; try { @@ -137,12 +184,13 @@ public class LuceneIndexer { } logger.info("Apply {}", sort); - //mediahouseid,mediatitle, mediafilehouseid,archived,hossz + // mediahouseid,mediatitle, mediafilehouseid,archived,hossz TopDocs results = searcher.search(query, skipRecords + takeRecords, new Sort(sort)); - //TopDocs results = searcher.search(query, skipRecords + takeRecords); + // TopDocs results = searcher.search(query, skipRecords + + // takeRecords); ScoreDoc[] scoreDocs = results.scoreDocs; UnifiedHighlighter highlighter = new UnifiedHighlighter(searcher, analyzer); - //highlighter.setFormatter(formatter); + // highlighter.setFormatter(formatter); logger.info("Total result: {}", results.totalHits); for (int i = skipRecords; i < results.totalHits.value; i++) { if (i > (skipRecords + takeRecords) - 1) { @@ -151,10 +199,12 @@ public class LuceneIndexer { Document doc = searcher.doc(scoreDocs[i].doc); String[] fragments = highlighter.highlight(DESCRIPTION, query, results); String highlight = fragments[0]; - ret.add(new IndexerDescription(doc, highlight)); + mediaList.add(createArchivedMedia(doc, highlight)); logger.info("Item " + doc.get("mediaTitle") + " : " + fragments[0]); } + ret.setItems(mediaList); + ret.setItemCount(results.totalHits.value); } catch (Exception e) { logger.error("Search", e); } finally { diff --git a/server/user.jobengine.osgi.db/META-INF/MANIFEST.MF b/server/user.jobengine.osgi.db/META-INF/MANIFEST.MF index b982f35a..50367efd 100644 --- a/server/user.jobengine.osgi.db/META-INF/MANIFEST.MF +++ b/server/user.jobengine.osgi.db/META-INF/MANIFEST.MF @@ -14,9 +14,14 @@ Require-Bundle: user.jobengine.osgi.commons;bundle-version="1.0.0", Service-Component: OSGI-INF/component.xml Bundle-ActivationPolicy: lazy Import-Package: com.fasterxml.jackson.annotation;version="2.4.5", + com.fasterxml.jackson.jaxrs.base;version="2.4.5", + com.fasterxml.jackson.module.jaxb;version="2.4.5", javax.ws.rs.client, javax.ws.rs.core, org.apache.logging.log4j;version="2.8.2", - org.jboss.resteasy.client.jaxrs + org.jboss.resteasy.client.jaxrs, + org.jboss.resteasy.plugins.providers, + org.jboss.resteasy.plugins.providers.jackson, + org.jboss.resteasy.spi Export-Package: user.jobengine.db diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/LuceneMediaFinder.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/LuceneMediaFinder.java index a6b39687..fbabe212 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/LuceneMediaFinder.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/LuceneMediaFinder.java @@ -3,29 +3,42 @@ package user.jobengine.db; import java.util.List; import javax.ws.rs.client.WebTarget; -import javax.ws.rs.core.Response; +import javax.ws.rs.core.GenericType; import org.jboss.resteasy.client.jaxrs.ResteasyClient; import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; +import org.jboss.resteasy.plugins.providers.RegisterBuiltin; +import org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider; +import org.jboss.resteasy.spi.ResteasyProviderFactory; public class LuceneMediaFinder implements IMediaFinder { private WebTarget webTarget; - private String apiAddress = "http://10.228.198.1:8080/rest"; + private String apiAddress = "http://10.228.198.1:8080/indexer"; private String apiPath = "/search/*:*/0/10/1/1"; @Override public SearchResult search(String criteria, List searchFilters, String orderBy, boolean orderAscending, int fromResult, int toResult) { + SearchResult ret = new SearchResult(); // TODO Auto-generated method stub + ResteasyProviderFactory instance = ResteasyProviderFactory.getInstance(); + RegisterBuiltin.register(instance); + instance.registerProvider(ResteasyJackson2Provider.class); ResteasyClient client = new ResteasyClientBuilder().build(); webTarget = client.target(apiAddress); WebTarget target = webTarget.path(apiPath); - Response response = target.request().get(); - //TODO List legyen a valasz - //utana konvertaljuk List tipusra - - return null; + // Response response = target.request().get(IndexerDescription.class); + // Response response = target.get(new + // GenericType>() { + // }); + List response = target.request().get(new GenericType>() { + }); + // TODO List legyen a valasz + // utana konvertaljuk List tipusra + // List archivedMedia = (List) response; + + return ret; } } diff --git a/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportTest.java b/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportTest.java index 62255305..83bdd720 100644 --- a/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportTest.java +++ b/server/user.jobengine.osgi.server/test/user/jobengine/server/IT/SupportTest.java @@ -1,6 +1,7 @@ package user.jobengine.server.IT; import java.util.Date; +import java.util.List; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -10,6 +11,7 @@ import user.commons.logging.LogUtils; import user.jobengine.db.IItemManager; import user.jobengine.db.Item; import user.jobengine.db.ItemManager; +import user.jobengine.db.LuceneMediaFinder; import user.jobengine.db.Media; import user.jobengine.db.MediaFile; @@ -59,7 +61,28 @@ public class SupportTest { item.add(); - //manager.mergeItemStructure(item); + // manager.mergeItemStructure(item); + } + + @Test + public void tryLuceneSearch() throws Exception { + // Item item = manager.createItem("Default", "Item1", "Itemdesc1", + // "Itemhouseid1"); + // Media media = manager.createMedia("Default", "Media1", "Mediadesc1", + // "Mediahouseid1"); + // + // item.appendMedia(media); + // MediaFile mf1 = manager.createMediaFile("/xxx", + // manager.getFileType("Lowres"), manager.getSystemStore(true), media); + // MediaFile mf2 = manager.createMediaFile("/yyy", + // manager.getFileType("Lowres"), manager.getSystemStore(true), media); + // + // item.add(); + + List dummy = null; + LuceneMediaFinder luceneSearch = new LuceneMediaFinder(); + // luceneSearch.search(item.getDescription(), dummy, "", true, 1, 10); + luceneSearch.search("", dummy, "", true, 1, 10); } } -- 2.54.0