From 3ef6af3fd49013495c3e03d04212302eb7d549f9 Mon Sep 17 00:00:00 2001 From: Victoria Date: Tue, 11 Aug 2015 03:16:07 +0300 Subject: [PATCH] Fixed sorting and searching --- .../segments.gen | Bin 0 -> 36 bytes .../segments_1 | Bin 0 -> 53 bytes .../write.lock | 0 .../segments.gen | Bin 0 -> 36 bytes .../segments_1 | Bin 0 -> 53 bytes .../write.lock | 0 .../segments.gen | Bin 0 -> 36 bytes .../segments_1 | Bin 0 -> 53 bytes .../write.lock | 0 .../com/exadel/config/WebConfiguration.java | 5 +- .../exadel/controller/EventController.java | 6 +-- .../controller/TrainingsController.java | 7 ++- .../com/exadel/controller/UserController.java | 5 +- .../com/exadel/model/entity/events/Event.java | 19 -------- .../model/entity/training/Training.java | 12 ++--- .../com/exadel/model/entity/user/User.java | 29 ++++++----- .../com/exadel/search/TrainingSearch.java | 46 ++++++------------ 17 files changed, 45 insertions(+), 84 deletions(-) create mode 100644 com.exadel.model.entity.events.TrainingEvent/segments.gen create mode 100644 com.exadel.model.entity.events.TrainingEvent/segments_1 create mode 100644 com.exadel.model.entity.events.TrainingEvent/write.lock create mode 100644 com.exadel.model.entity.events.TrainingFeedbackEvent/segments.gen create mode 100644 com.exadel.model.entity.events.TrainingFeedbackEvent/segments_1 create mode 100644 com.exadel.model.entity.events.TrainingFeedbackEvent/write.lock create mode 100644 com.exadel.model.entity.events.UserFeedbackEvent/segments.gen create mode 100644 com.exadel.model.entity.events.UserFeedbackEvent/segments_1 create mode 100644 com.exadel.model.entity.events.UserFeedbackEvent/write.lock diff --git a/com.exadel.model.entity.events.TrainingEvent/segments.gen b/com.exadel.model.entity.events.TrainingEvent/segments.gen new file mode 100644 index 0000000000000000000000000000000000000000..14e669094ec60c5563e4844ea1ee5bd83c417da5 GIT binary patch literal 36 ccmezW|NmbG2w;TK2Q((XfU+5WJ-as-0JNV8y8r+H literal 0 HcmV?d00001 diff --git a/com.exadel.model.entity.events.TrainingEvent/segments_1 b/com.exadel.model.entity.events.TrainingEvent/segments_1 new file mode 100644 index 0000000000000000000000000000000000000000..9b1ed0f9859e7906bad2b6933ef1d07d6c1a7127 GIT binary patch literal 53 pcmcD&o+HjtoSL4SnpaZHz`(!^#2~;3p&;Y|jma-y{ML> converters) { converters.add(new MappingJackson2HttpMessageConverter()); } - - @Override + /* @Override public void configureAsyncSupport(AsyncSupportConfigurer configurer) { configurer.setDefaultTimeout(WEEK); - } + }*/ } \ No newline at end of file diff --git a/src/main/java/com/exadel/controller/EventController.java b/src/main/java/com/exadel/controller/EventController.java index 3ef2c88..1839c61 100644 --- a/src/main/java/com/exadel/controller/EventController.java +++ b/src/main/java/com/exadel/controller/EventController.java @@ -60,9 +60,7 @@ public List getAll() { List events = new ArrayList<>(); events.addAll(trainingEventService.getUnwatchedEvents()); events.addAll(trainingFeedbackEventService.getUnwatchedEvents()); - events.addAll(userFeedbackEventService.getUnwatchedEvents()); - List list = new ArrayList<>(); for (Event event: events){ list.add(event.toEventDTO()); @@ -123,15 +121,13 @@ else if (eventDTO.getEventType()== EventType.TRAINING_FEEDBACK){ List events = new ArrayList<>(); events.addAll(trainingEventService.getUnwatchedEvents()); events.addAll(trainingFeedbackEventService.getUnwatchedEvents()); + events.addAll(userFeedbackEventService.getUnwatchedEvents()); List result = new ArrayList<>(); for (Event event: events){ result.add(event.toEventDTO()); } entry.getKey().setResult(result); } - for (Map.Entry>, Integer> entry : EventController.eventRequests.entrySet()) { - entry.getKey().setResult(new ArrayList<>()); - } } diff --git a/src/main/java/com/exadel/controller/TrainingsController.java b/src/main/java/com/exadel/controller/TrainingsController.java index b3a697a..845d9da 100644 --- a/src/main/java/com/exadel/controller/TrainingsController.java +++ b/src/main/java/com/exadel/controller/TrainingsController.java @@ -78,6 +78,7 @@ public class TrainingsController { @PersistenceContext private EntityManager entityManager; + @Autowired private TrainingFeedbackEventService trainingFeedbackEventService; @Autowired private UserFeedbackEventService userFeedbackEventService; @@ -207,7 +208,9 @@ public List getTrainingsPaging(@PathVariable Integer pageNumber, @R fullTextEntityManager.getSearchFactory() .buildQueryBuilder().forEntity(Training.class).get(); List results = new ArrayList<>(); - + if(sortParam!=null && sortParam.equals("trainer")) { + sortParam = "trainer.name"; + } Query query = null; Query trainerNameQuery ; Query targetAudienceQuery; @@ -246,7 +249,7 @@ public List getTrainingsPaging(@PathVariable Integer pageNumber, @R this.size=1; } else - this.size = this.size/size; + this.size = this.size/ size; size = jpaQuery.getResultSize(); results=jpaQuery.getResultList(); diff --git a/src/main/java/com/exadel/controller/UserController.java b/src/main/java/com/exadel/controller/UserController.java index f514bcc..64aa725 100644 --- a/src/main/java/com/exadel/controller/UserController.java +++ b/src/main/java/com/exadel/controller/UserController.java @@ -33,7 +33,6 @@ import javax.transaction.Transactional; import java.util.List; import java.util.UUID; -import java.util.NoSuchElementException; @@ -160,6 +159,8 @@ public List getUsersPaging(@PathVariable Integer pageNumber, @RequestPa emailCriterion = userSearch.searchByEmail(email); criteria.add(emailCriterion); } + criteria.setMaxResults(size); + criteria.setFirstResult(pageNumber); if(sortParam!=null) { Sort sort = new Sort( new SortField(sortParam, SortField.Type.STRING)); @@ -174,8 +175,6 @@ public List getUsersPaging(@PathVariable Integer pageNumber, @RequestPa this.size = 1; } else this.size = this.size / size; - criteria.setMaxResults(size); - criteria.setFirstResult(pageNumber); users = criteria.list(); session.close(); diff --git a/src/main/java/com/exadel/model/entity/events/Event.java b/src/main/java/com/exadel/model/entity/events/Event.java index 7cea6ab..29d29ce 100644 --- a/src/main/java/com/exadel/model/entity/events/Event.java +++ b/src/main/java/com/exadel/model/entity/events/Event.java @@ -13,23 +13,6 @@ import java.util.Date; @MappedSuperclass -@Indexed -@AnalyzerDef(name = "customanalize", - tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class), - filters = { - @TokenFilterDef(factory = LowerCaseFilterFactory.class), - @TokenFilterDef(factory = SnowballPorterFilterFactory.class, params = { - @org.hibernate.search.annotations.Parameter(name = "language", value = "English") - }), - @TokenFilterDef(factory = SnowballPorterFilterFactory.class, params = { - @org.hibernate.search.annotations.Parameter(name = "language", value = "Russian") - }), - @TokenFilterDef(factory = NGramFilterFactory.class,params ={ - @org.hibernate.search.annotations.Parameter(name="minGramSize",value="3"), @org.hibernate.search.annotations.Parameter(name = "maxGramSize", value = "100")}), - @TokenFilterDef(factory =EdgeNGramFilterFactory.class, params ={ - @org.hibernate.search.annotations.Parameter(name="minGramSize",value="3"), @org.hibernate.search.annotations.Parameter(name = "maxGramSize", value = "100")}) - - }) public abstract class Event implements Comparable { @Id @GeneratedValue(strategy = GenerationType.AUTO) @@ -38,8 +21,6 @@ public abstract class Event implements Comparable { @Column(name = "is_watched") private boolean isWatched; - @Field - @Analyzer(definition = "customanalize") private String description; private Date date; diff --git a/src/main/java/com/exadel/model/entity/training/Training.java b/src/main/java/com/exadel/model/entity/training/Training.java index dbbdd91..1a75654 100644 --- a/src/main/java/com/exadel/model/entity/training/Training.java +++ b/src/main/java/com/exadel/model/entity/training/Training.java @@ -34,7 +34,7 @@ @Parameter(name = "language", value = "Russian") }), @TokenFilterDef(factory =EdgeNGramFilterFactory.class, params ={ - @Parameter(name="minGramSize",value="1")}) + @Parameter(name="minGramSize",value="1"),@Parameter(name="maxGramSize",value="10")}) }) public class Training{ @@ -42,9 +42,8 @@ public class Training{ @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; -@Fields({ - @Field(analyze= Analyze.YES, store= Store.NO), - @Field( analyze= Analyze.YES, store= Store.NO)}) + + @Field(analyze= Analyze.YES, store= Store.NO) @Analyzer(definition = "customanalyzer") @Column(name = "name") private String name; @@ -55,9 +54,8 @@ public class Training{ private ExternalTrainer trainer; - @Fields({ - @Field( analyze= Analyze.YES, store= Store.NO), - @Field( analyze= Analyze.YES, store= Store.NO)}) + + @Field( analyze= Analyze.YES, store= Store.NO) @Column(name = "target_audience") @Analyzer(definition = "customanalyzer") private String targetAudience; diff --git a/src/main/java/com/exadel/model/entity/user/User.java b/src/main/java/com/exadel/model/entity/user/User.java index a38c208..e8a1b60 100644 --- a/src/main/java/com/exadel/model/entity/user/User.java +++ b/src/main/java/com/exadel/model/entity/user/User.java @@ -1,13 +1,20 @@ package com.exadel.model.entity.user; import com.exadel.dto.UserDTO; +import org.apache.lucene.analysis.TokenStream; +import org.apache.lucene.analysis.core.KeywordTokenizer; import org.apache.lucene.analysis.core.KeywordTokenizerFactory; +import org.apache.lucene.analysis.core.LowerCaseFilter; import org.apache.lucene.analysis.core.LowerCaseFilterFactory; import org.apache.lucene.analysis.miscellaneous.LengthFilterFactory; +import org.apache.lucene.analysis.miscellaneous.TrimFilter; import org.apache.lucene.analysis.ngram.EdgeNGramFilterFactory; import org.apache.lucene.analysis.ngram.NGramFilterFactory; +import org.apache.lucene.analysis.pattern.PatternReplaceFilter; import org.apache.lucene.analysis.snowball.SnowballPorterFilterFactory; import org.apache.lucene.analysis.standard.StandardTokenizerFactory; +import org.apache.lucene.util.PagedBytes; +import org.apache.lucene.util.packed.PackedInts; import org.hibernate.search.annotations.*; import org.hibernate.search.annotations.Parameter; import org.hibernate.search.bridge.builtin.EnumBridge; @@ -15,7 +22,6 @@ import javax.persistence.*; import org.hibernate.search.annotations.Index; -import org.hibernate.search.bridge.builtin.IntegerBridge; @Entity @Indexed @@ -41,31 +47,27 @@ public class User { @GeneratedValue(strategy = GenerationType.AUTO) private long id; - @Fields({ - @Field(analyze = Analyze.YES, store = Store.NO), - @Field(analyze = Analyze.YES, store = Store.NO)}) + + @Field(analyze = Analyze.YES, store = Store.NO) @Analyzer(definition = "customanalyz") @Column(name = "name", nullable = false) private String name; - @Fields({ - @Field(analyze = Analyze.YES, store = Store.NO), - @Field(analyze = Analyze.YES, store = Store.NO)}) + + @Field(analyze = Analyze.YES, store = Store.NO) @Analyzer(definition = "customanalyz") @Column(name = "surname", nullable = false) private String surname; - @Fields({ - @Field(analyze = Analyze.YES, store = Store.NO), - @Field(analyze = Analyze.YES, store = Store.NO)}) + + @Field(analyze = Analyze.YES, store = Store.NO) @Analyzer(definition = "customanalyz") @Column(name = "phone", nullable = false) private String phone; - @Fields({ - @Field(analyze = Analyze.YES, store = Store.NO), - @Field(analyze = Analyze.YES, store = Store.NO)}) + + @Field(analyze = Analyze.YES, store = Store.NO) @Analyzer(definition = "customanalyz") private String email; @@ -147,4 +149,5 @@ public UserRole getRole() { public void setRole(UserRole role) { this.role = role; } + } diff --git a/src/main/java/com/exadel/search/TrainingSearch.java b/src/main/java/com/exadel/search/TrainingSearch.java index 72f0ff9..a5e309c 100644 --- a/src/main/java/com/exadel/search/TrainingSearch.java +++ b/src/main/java/com/exadel/search/TrainingSearch.java @@ -2,10 +2,15 @@ import com.exadel.model.entity.training.Entry; import com.exadel.model.entity.training.Training; +import org.apache.lucene.index.Term; +import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.Query; +import org.apache.lucene.search.WildcardQuery; import org.hibernate.Criteria; import org.hibernate.SessionFactory; +import org.hibernate.criterion.Criterion; import org.hibernate.criterion.Restrictions; +import org.hibernate.search.exception.EmptyQueryException; import org.hibernate.search.jpa.FullTextQuery; import org.hibernate.search.jpa.FullTextEntityManager; import org.hibernate.search.jpa.Search; @@ -29,49 +34,29 @@ public class TrainingSearch { @Autowired SessionFactory sessionFactory; - public Query searchByTrainerName(String name) { + public Query searchByTrainerName(String name) { FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager); QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory() .buildQueryBuilder().forEntity(Training.class).get(); - org.apache.lucene.search.Query query = + Query query = queryBuilder - .keyword() - .onFields("trainer.name","trainer.surname") - .matching(name) - .createQuery(); + .keyword().wildcard().onFields("trainer.name", "trainer.surname").matching(name).createQuery(); + return query; } - public List searchByTrainerSurame(String surname, String name) { - FullTextEntityManager fullTextEntityManager = - Search.getFullTextEntityManager(entityManager); - QueryBuilder queryBuilder = - fullTextEntityManager.getSearchFactory() - .buildQueryBuilder().forEntity(Training.class).get(); -//queryBuilder. - org.apache.lucene.search.Query query = queryBuilder.keyword().onField("trainer.surname").matching(surname).createQuery(); - FullTextQuery jpaQuery = - fullTextEntityManager.createFullTextQuery(query,Training.class); - @SuppressWarnings("unchecked") - List results = jpaQuery.getResultList(); - return results; - } public Query searchByTargetAudience(String text) { FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager); QueryBuilder queryBuilder = fullTextEntityManager.getSearchFactory() .buildQueryBuilder().forEntity(Training.class).get(); - - Query query = + Query query = queryBuilder - .keyword() - .onFields("targetAudience") - .matching(text) - .createQuery(); + .keyword().wildcard().onField("targetAudience").matching(text).createQuery(); return query; } public Query searchByName(String text) { @@ -81,16 +66,13 @@ public Query searchByName(String text) { fullTextEntityManager.getSearchFactory() .buildQueryBuilder().forEntity(Training.class).get(); - org.apache.lucene.search.Query query = + Query query = queryBuilder - .keyword() - .onFields("name") - .matching(text) - .createQuery(); + .keyword().wildcard().onField("name").matching(text).createQuery(); return query; } - public List searchByDate(Date date ) { + public List searchByDate(Date date,String name ) { Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Entry.class); criteria.add(Restrictions.eq("beginTime", date+"%")); List result =new ArrayList(criteria.list()) ;