use of com.rbmhtechnology.vind.api.query.FulltextSearch in project vind by RBMHTechnology.
the class TestServerTest method testClearIndex.
// MBDN-432
@Test
public void testClearIndex() {
// Storing as text_en solr type
SingleValueFieldDescriptor.TextFieldDescriptor<String> title = new FieldDescriptorBuilder().setFullText(true).setStored(true).buildTextField("title");
FieldDescriptor<String> entityID = new FieldDescriptorBuilder().buildTextField("entityID");
SingleValueFieldDescriptor<String> description = new FieldDescriptorBuilder().setLanguage(Language.English).buildTextField("description");
DocumentFactory assets = new DocumentFactoryBuilder("asset").addField(title).addField(description).addField(entityID).build();
Document d1 = assets.createDoc("1").setValue(title, "Hello World").setValue(entityID, "123").setValue(description, "This value is not stored");
Document d2 = assets.createDoc("2").setValue(entityID, "456").setValue(title, "Hello Friends").setValue(description, "This value is also not stored");
SearchServer server = testSearchServer.getSearchServer();
server.index(d1);
server.index(d2);
server.commit();
FulltextSearch searchAll = Search.fulltext();
final SearchResult searchResult = server.execute(searchAll, assets);
assertEquals("No of results", 2, searchResult.getNumOfResults());
final Document result = searchResult.getResults().get(0);
assertThat("Doc-Title", result.getValue(title), Matchers.equalTo("Hello World"));
server.clearIndex();
server.commit();
final SearchResult searchResultClear = server.execute(searchAll, assets);
assertEquals("No of results", 0, searchResultClear.getNumOfResults());
}
use of com.rbmhtechnology.vind.api.query.FulltextSearch in project vind by RBMHTechnology.
the class TestServerTest method timeZoneSearchTest.
// MBDN-441
@Test
public void timeZoneSearchTest() {
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("UTC"));
ZonedDateTime yesterday = ZonedDateTime.now(ZoneId.of("UTC")).minus(1, ChronoUnit.DAYS);
ZonedDateTime oneHourAgo = ZonedDateTime.now(ZoneId.systemDefault()).minus(1, ChronoUnit.HOURS);
FieldDescriptor<String> title = new FieldDescriptorBuilder().setFullText(true).buildTextField("title");
SingleValueFieldDescriptor.DateFieldDescriptor<ZonedDateTime> created = new FieldDescriptorBuilder().setFacet(true).buildDateField("created");
SingleValueFieldDescriptor.UtilDateFieldDescriptor<Date> modified = new FieldDescriptorBuilder().setFacet(true).buildUtilDateField("modified");
NumericFieldDescriptor<Long> category = new FieldDescriptorBuilder().setFacet(true).buildMultivaluedNumericField("category", Long.class);
DocumentFactory assets = new DocumentFactoryBuilder("asset").addField(title).addField(created).addField(category).addField(modified).build();
Document d1 = assets.createDoc("1").setValue(title, "Hello World").setValue(created, yesterday).setValue(modified, new Date()).setValues(category, Arrays.asList(1L, 2L));
Document d2 = assets.createDoc("2").setValue(title, "Hello Friends").setValue(created, now).setValue(modified, new Date()).addValue(category, 4L);
SearchServer server = testSearchServer.getSearchServer();
server.index(d1);
server.index(d2);
server.commit();
FulltextSearch searchAll = Search.fulltext().filter(before("created", new DateMathExpression().sub(1, HOUR))).timeZone("America/Havana");
final SearchResult searchResult = server.execute(searchAll, assets);
assertEquals("No of results", 1, searchResult.getNumOfResults());
final Document result = searchResult.getResults().get(0);
assertThat("Doc-Title", result.getValue(title), Matchers.equalTo("Hello World"));
}
use of com.rbmhtechnology.vind.api.query.FulltextSearch in project vind by RBMHTechnology.
the class TestServerTest method sliceResultTest.
// MBDN-495
@Test
public void sliceResultTest() {
final TextFieldDescriptor textMulti = new FieldDescriptorBuilder().buildMultivaluedTextField("textMulti");
final NumericFieldDescriptor<Integer> numMulti = new FieldDescriptorBuilder().buildMultivaluedNumericField("numMulti", Integer.class);
final DateFieldDescriptor dateMulti = new FieldDescriptorBuilder().buildSortableMultivaluedDateField("dateMulti", txs -> ((Collection<ZonedDateTime>) txs).stream().max(Comparator.<ZonedDateTime>naturalOrder()).get());
final SingleValuedComplexField.UtilDateComplexField<Taxonomy, Date, Date> dateSingle = new ComplexFieldDescriptorBuilder<Taxonomy, Date, Date>().setStored(true, tx -> tx.getUtilDate()).buildUtilDateComplexField("singleDate", Taxonomy.class, Date.class, Date.class);
final MultiValuedComplexField.DateComplexField<Taxonomy, ZonedDateTime, ZonedDateTime> dateComplexMulti = new ComplexFieldDescriptorBuilder<Taxonomy, ZonedDateTime, ZonedDateTime>().setStored(true, tx -> tx.getDate()).buildMultivaluedDateComplexField("dateComplexMulti", Taxonomy.class, ZonedDateTime.class, ZonedDateTime.class);
final DocumentFactory assets = new DocumentFactoryBuilder("asset").addField(textMulti).addField(numMulti).addField(dateMulti).addField(dateSingle).addField(dateComplexMulti).build();
final Document doc1 = assets.createDoc("1").setValues(textMulti, "text 1.1", "text 1.2").setValues(numMulti, 6, 7, 8).setValue(dateSingle, new Taxonomy("today", 2, "todays date", ZonedDateTime.now())).setValues(dateComplexMulti, new Taxonomy("today", 2, "todays date", ZonedDateTime.now()), new Taxonomy("today", 2, "todays date", ZonedDateTime.now().minusDays(1))).setValues(dateMulti, ZonedDateTime.now().minusMonths(3));
final Document doc2 = assets.createDoc("2").setValues(textMulti, "text 2.1", "text 2.2").setValues(numMulti, 1, 2, 3).setValue(dateSingle, new Taxonomy("today", 1, "todays date", ZonedDateTime.now())).setValues(dateComplexMulti, new Taxonomy("today", 2, "todays date", ZonedDateTime.now().plusDays(2)), new Taxonomy("today", 2, "todays date", ZonedDateTime.now().minusDays(1))).setValues(dateMulti, ZonedDateTime.now().plusMonths(1));
final Document doc3 = assets.createDoc("3").addValue(textMulti, null);
final SearchServer server = testSearchServer.getSearchServer();
server.index(doc1);
server.index(doc2);
server.index(doc3);
server.commit();
// test empty filter in single valued field
FulltextSearch searchAll = Search.fulltext().slice(1).sort(asc(textMulti));
SearchResult searchResult = server.execute(searchAll, assets).print();
assertEquals("An Slice starting in index 1", "2", searchResult.getResults().get(0).getId());
}
use of com.rbmhtechnology.vind.api.query.FulltextSearch in project vind by RBMHTechnology.
the class TestServerTest method complexFieldBooleanTest.
@Test
public void complexFieldBooleanTest() {
SingleValuedComplexField.NumericComplexField<Taxonomy, Integer, Boolean> numericComplexField = new ComplexFieldDescriptorBuilder<Taxonomy, Integer, Boolean>().setFacet(true, tx -> Arrays.asList(tx.getId())).setStored(true, tx -> true).setFullText(true, tx -> Arrays.asList(tx.getTerm())).setSuggest(true, tx -> Arrays.asList(tx.getLabel())).buildNumericComplexField("numberFacetBooleanStoredTaxonomy", Taxonomy.class, Integer.class, Boolean.class);
MultiValuedComplexField.TextComplexField<Taxonomy, String, String> multiComplexField = new ComplexFieldDescriptorBuilder<Taxonomy, String, String>().setFacet(true, tx -> Arrays.asList(tx.getLabel())).setSuggest(true, tx -> Arrays.asList(tx.getLabel())).setStored(true, tx -> tx.getTerm()).buildMultivaluedTextComplexField("multiTextTaxonomy", Taxonomy.class, String.class, String.class);
DocumentFactory assets = new DocumentFactoryBuilder("asset").addField(numericComplexField).addField(multiComplexField).build();
Document d1 = assets.createDoc("1").setValue(numericComplexField, new Taxonomy("uno", 1, "Uno label", ZonedDateTime.now())).setValues(multiComplexField, new Taxonomy("uno", 1, "Label", ZonedDateTime.now()), new Taxonomy("dos", 2, "Label dos", ZonedDateTime.now()));
Document d2 = assets.createDoc("2").setValue(numericComplexField, new Taxonomy("dos", 2, "dos label", ZonedDateTime.now())).setValues(multiComplexField, new Taxonomy("uno", 1, "Label", ZonedDateTime.now()), new Taxonomy("dos", 1, "Label", ZonedDateTime.now()));
SearchServer server = testSearchServer.getSearchServer();
server.index(d1);
server.index(d2);
server.commit();
final FulltextSearch searchAll = Search.fulltext();
final SearchResult searchResult = server.execute(searchAll, assets);
}
use of com.rbmhtechnology.vind.api.query.FulltextSearch in project vind by RBMHTechnology.
the class TestServerTest method testEmbeddedSolr.
@Test
public void testEmbeddedSolr() {
ZonedDateTime now = ZonedDateTime.now(ZoneId.of("UTC"));
ZonedDateTime yesterday = ZonedDateTime.now(ZoneId.of("UTC")).minus(1, ChronoUnit.DAYS);
FieldDescriptor<String> title = new FieldDescriptorBuilder().setFullText(true).setFacet(true).buildTextField("title");
SingleValueFieldDescriptor.DateFieldDescriptor<ZonedDateTime> created = new FieldDescriptorBuilder().setFacet(true).buildDateField("created");
SingleValueFieldDescriptor.UtilDateFieldDescriptor<Date> modified = new FieldDescriptorBuilder().setFacet(true).buildUtilDateField("modified");
NumericFieldDescriptor<Long> category = new FieldDescriptorBuilder().setFacet(true).buildMultivaluedNumericField("category", Long.class);
DocumentFactory assets = new DocumentFactoryBuilder("asset").addField(title).addField(created).addField(category).addField(modified).build();
Document d1 = assets.createDoc("1").setValue(title, "Hello World").setValue(created, yesterday).setValue(modified, new Date()).setValues(category, Arrays.asList(1L, 2L));
Document d2 = assets.createDoc("2").setValue(title, "Hello Friends").setValue(created, now).setValue(modified, new Date()).addValue(category, 4L);
SearchServer server = testSearchServer.getSearchServer();
server.index(d1);
server.index(d2);
server.commit();
Interval.ZonedDateTimeInterval i1 = Interval.dateInterval("past_24_hours", ZonedDateTime.now().minus(Duration.ofDays(1)), ZonedDateTime.now());
Interval.ZonedDateTimeInterval i2 = Interval.dateInterval("past_week", ZonedDateTime.now().minus(Duration.ofDays(7)), ZonedDateTime.now());
FulltextSearch search = Search.fulltext("hello").filter(category.between(0, 10)).filter(created.before(ZonedDateTime.now())).filter(modified.before(new Date())).facet(pivot("cats", category, created)).facet(pivot("catVStitle", category, title)).facet(stats("avg Cat", category, "cats", "catVStitle").count().sum().percentiles(9.9, 1.0).mean()).facet(stats("countDate", created).count().sum().mean()).facet(query("new An dHot", category.between(0, 5), "cats")).facet(query("anotherQuery", and(category.between(7, 10), created.after(ZonedDateTime.now().minus(Duration.ofDays(1)))))).facet(range("dates", created, ZonedDateTime.now().minus(Duration.ofDays(1)), ZonedDateTime.now(), Duration.ofHours(1))).facet(range("mod a", modified, new Date(), new Date(), 1L, TimeUnit.HOURS, "cats")).facet(interval("quality", category, Interval.numericInterval("low", 0L, 2L), Interval.numericInterval("high", 3L, 4L))).facet(interval("time", created, i1, i2)).facet(interval("time2", modified, Interval.dateInterval("early", new Date(0), new Date(10000)), Interval.dateInterval("late", new Date(10000), new Date(20000)))).facet(category).facet(created).facet(modified).page(1, 25).sort(desc(created));
PageResult result = (PageResult) server.execute(search, assets);
assertEquals(2, result.getNumOfResults());
assertEquals(2, result.getResults().size());
assertEquals("2", result.getResults().get(0).getId());
assertEquals("asset", result.getResults().get(0).getType());
assertEquals("2", result.getResults().get(0).getId());
assertEquals("asset", result.getResults().get(0).getType());
assertTrue(now.equals(result.getResults().get(0).getValue(created)));
assertTrue(now.equals(result.getResults().get(0).getValue("created")));
assertEquals(2, result.getFacetResults().getIntervalFacet("quality").getValues().size());
assertEquals(2, result.getFacetResults().getIntervalFacet("time").getValues().size());
System.out.println(result);
PageResult next = (PageResult) result.nextPage();
SearchResult prev = next.previousPage();
TermFacetResult<Long> facet = result.getFacetResults().getTermFacet(category);
RangeFacetResult<ZonedDateTime> dates = result.getFacetResults().getRangeFacet("dates", ZonedDateTime.class);
ZonedDateTime rangeDate = dates.getValues().get(0).getValue();
}
Aggregations