Search in sources :

Example 11 with SearchResult

use of com.rbmhtechnology.vind.api.result.SearchResult 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();
}
Also used : SearchServer(com.rbmhtechnology.vind.api.SearchServer) SearchResult(com.rbmhtechnology.vind.api.result.SearchResult) Document(com.rbmhtechnology.vind.api.Document) SolrInputDocument(org.apache.solr.common.SolrInputDocument) PageResult(com.rbmhtechnology.vind.api.result.PageResult) ZonedDateTime(java.time.ZonedDateTime) FulltextSearch(com.rbmhtechnology.vind.api.query.FulltextSearch) Interval(com.rbmhtechnology.vind.api.query.facet.Interval) Test(org.junit.Test)

Example 12 with SearchResult

use of com.rbmhtechnology.vind.api.result.SearchResult in project vind by RBMHTechnology.

the class TestServerTest method testTypeIDScoreAsFieldname.

@Test
public void testTypeIDScoreAsFieldname() {
    SearchServer server = testSearchServer.getSearchServer();
    FieldDescriptor<String> title = new FieldDescriptorBuilder().setFullText(true).setFacet(true).buildTextField("title");
    FieldDescriptor<String> id = new FieldDescriptorBuilder().setFullText(true).setFacet(true).buildTextField("id");
    FieldDescriptor<String> type = new FieldDescriptorBuilder().setFullText(true).setFacet(true).buildTextField("type");
    FieldDescriptor<String> score = new FieldDescriptorBuilder().setFacet(true).buildTextField("score");
    DocumentFactory factory = new DocumentFactoryBuilder("test").addField(score, type, id, title).build();
    server.index(factory.createDoc("1").setValue(title, "Title").setValue(id, "ID").setValue(type, "TYPE").setValue(score, "Score"));
    server.commit();
    SearchResult result = server.execute(Search.fulltext().facet("id", "type", "score"), factory);
    assertEquals(1, result.getNumOfResults());
    Document doc = result.getResults().get(0);
    assertEquals("ID", doc.getValue("id"));
    assertEquals("Title", doc.getValue("title"));
    assertEquals("Score", doc.getValue("score"));
    assertEquals("TYPE", doc.getValue("type"));
    assertEquals(1.0, doc.getScore(), 0);
    assertEquals("test", doc.getType());
    assertEquals("1", doc.getId());
}
Also used : SearchServer(com.rbmhtechnology.vind.api.SearchServer) SearchResult(com.rbmhtechnology.vind.api.result.SearchResult) Document(com.rbmhtechnology.vind.api.Document) SolrInputDocument(org.apache.solr.common.SolrInputDocument) Test(org.junit.Test)

Example 13 with SearchResult

use of com.rbmhtechnology.vind.api.result.SearchResult in project vind by RBMHTechnology.

the class TestServerTest method isNotEmptyFilterTest.

// MBDN-459
@Test
public void isNotEmptyFilterTest() {
    final SingleValueFieldDescriptor.TextFieldDescriptor<String> textSingle = new FieldDescriptorBuilder().setFacet(true).buildTextField("textSingle");
    final SingleValueFieldDescriptor.NumericFieldDescriptor<Integer> numberSingle = new FieldDescriptorBuilder().setFacet(true).buildNumericField("intSingle", Integer.class);
    final MultiValueFieldDescriptor.TextFieldDescriptor<String> textMulti = new FieldDescriptorBuilder().setFacet(true).buildMultivaluedTextField("textMulti");
    final DocumentFactory assets = new DocumentFactoryBuilder("asset").addField(textSingle).addField(textMulti).addField(numberSingle).build();
    final Document doc1 = assets.createDoc("1").setValue(textSingle, "text 1");
    final Document doc2 = assets.createDoc("2").setValues(textMulti, "text 2.1", "text 2.2");
    final Document doc3 = assets.createDoc("3").setValue(textSingle, "").addValue(textMulti, null).setValue(numberSingle, 9);
    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().filter(textSingle.isNotEmpty());
    SearchResult searchResult = server.execute(searchAll, assets).print();
    assertEquals("Just documents with single text fields are returned", 1, searchResult.getNumOfResults());
    // test empty filter in multivalue field
    searchAll = Search.fulltext().filter(textMulti.isNotEmpty());
    searchResult = server.execute(searchAll, assets).print();
    assertEquals("Just documents with multi valued text fields are returned", 1, searchResult.getNumOfResults());
    // test empty filter in single valued field
    searchAll = Search.fulltext().filter(textSingle.isEmpty());
    searchResult = server.execute(searchAll, assets).print();
    assertEquals("Just documents with not or empty single text fields are returned", 2, searchResult.getNumOfResults());
    // test empty filter in single valued field
    searchAll = Search.fulltext().filter(not(textMulti.isNotEmpty()));
    searchResult = server.execute(searchAll, assets).print();
    assertEquals("Just documents with not or empty multi text fields are returned", 2, searchResult.getNumOfResults());
    // test empty filter in single valued numberfield
    searchAll = Search.fulltext().filter(numberSingle.isNotEmpty());
    searchResult = server.execute(searchAll, assets).print();
    assertEquals("Just documents with not or empty multi number fields are returned", 1, searchResult.getNumOfResults());
}
Also used : SearchServer(com.rbmhtechnology.vind.api.SearchServer) SearchResult(com.rbmhtechnology.vind.api.result.SearchResult) Document(com.rbmhtechnology.vind.api.Document) SolrInputDocument(org.apache.solr.common.SolrInputDocument) MultiValueFieldDescriptor(com.rbmhtechnology.vind.model.MultiValueFieldDescriptor) FulltextSearch(com.rbmhtechnology.vind.api.query.FulltextSearch) Test(org.junit.Test)

Example 14 with SearchResult

use of com.rbmhtechnology.vind.api.result.SearchResult in project vind by RBMHTechnology.

the class TestServerTest method testSubdocuments.

@Test
public void testSubdocuments() throws IOException {
    SearchServer server = testSearchServer.getSearchServer();
    SingleValueFieldDescriptor<String> title = new FieldDescriptorBuilder().setFullText(true).setFacet(true).buildTextField("title");
    SingleValueFieldDescriptor<String> color = new FieldDescriptorBuilder().setFullText(true).setFacet(true).buildTextField("color");
    DocumentFactory asset = new DocumentFactoryBuilder("asset").addField(title, color).build();
    DocumentFactory marker = new DocumentFactoryBuilder("marker").addField(title, color).build();
    Document a1 = asset.createDoc("A1").setValue(title, "A1 1").setValue(color, "blue");
    Document a2 = asset.createDoc("A2").setValue(title, "A2").setValue(color, "red").addChild(marker.createDoc("M1").setValue(title, "M1").setValue(color, "blue"));
    Document a3 = asset.createDoc("A3").setValue(title, "A3").setValue(color, "green").addChild(marker.createDoc("M2").setValue(title, "M2").setValue(color, "red"));
    Document a4 = asset.createDoc("A4").setValue(title, "A4").setValue(color, "blue").addChild(marker.createDoc("M3").setValue(title, "M3").setValue(color, "blue"));
    server.index(a1);
    server.index(a2);
    server.index(a3);
    server.index(a4);
    server.commit();
    // search in all assets
    server.execute(Search.fulltext("some"), asset);
    // search in all markers
    server.execute(Search.fulltext("some"), marker);
    // search in all markers
    SearchResult orChildrenFilteredSearch = server.execute(Search.fulltext().filter(Filter.eq(color, "blue")).orChildrenSearch(marker), asset);
    // search in all markers
    SearchResult andChildrenFilteredSearch = server.execute(Search.fulltext().filter(Filter.eq(color, "blue")).andChildrenSearch(marker), asset);
    Assert.assertTrue(orChildrenFilteredSearch.getNumOfResults() == 3);
    Assert.assertTrue(andChildrenFilteredSearch.getNumOfResults() == 1);
    // search in all markers
    SearchResult orChildrenCustomSearch = server.execute(Search.fulltext("1").filter(Filter.eq(color, "blue")).orChildrenSearch(Search.fulltext().filter(Filter.eq(color, "red")), marker), asset);
    // TODO: confirm with Thomas
    Assert.assertEquals(3, orChildrenCustomSearch.getNumOfResults());
// server.execute(Search.fulltext("some").facet(children(title)),asset); //get title facts for children
// server.executdeepSearchResulte(Search.fulltext("some").facet(parent(title)),marker); //get title facets for parents
// server.execute(Search.fulltext("some").includeChildren(true),marker); //search everywhere and include matching children
}
Also used : SearchServer(com.rbmhtechnology.vind.api.SearchServer) SearchResult(com.rbmhtechnology.vind.api.result.SearchResult) Document(com.rbmhtechnology.vind.api.Document) SolrInputDocument(org.apache.solr.common.SolrInputDocument) Test(org.junit.Test)

Example 15 with SearchResult

use of com.rbmhtechnology.vind.api.result.SearchResult in project vind by RBMHTechnology.

the class TestServerTest method testSubdocumentFullReindex.

// MBDN-563
@Test
public void testSubdocumentFullReindex() throws IOException {
    SearchServer server = testSearchServer.getSearchServer();
    // SearchServer server = SolrSearchServer.getInstance("com.rbmhtechnology.searchlib.solr.RemoteSolrServerProvider","http://localhost:8983/solr","core");
    server.clearIndex();
    server.commit();
    SingleValueFieldDescriptor<String> title = new FieldDescriptorBuilder().setFullText(true).setFacet(true).buildTextField("title");
    SingleValueFieldDescriptor<String> color = new FieldDescriptorBuilder().setFullText(true).setFacet(true).setSuggest(true).buildTextField("color");
    SingleValueFieldDescriptor<String> parent = new FieldDescriptorBuilder().setFacet(true).buildTextField("parent");
    DocumentFactory asset = new DocumentFactoryBuilder("asset").setUpdatable(true).addField(title, color).build();
    DocumentFactory marker = new DocumentFactoryBuilder("marker").setUpdatable(true).addField(title, color, parent).build();
    Document a1 = asset.createDoc("A1").setValue(title, "A1 1").setValue(color, "blue");
    Document a2 = asset.createDoc("A2").setValue(title, "A2").setValue(color, "red").addChild(marker.createDoc("M1").setValue(title, "M1").setValue(parent, "A2").setValue(color, "blue")).addChild(marker.createDoc("M4").setValue(title, "M4").setValue(parent, "A2").setValue(color, "green")).addChild(marker.createDoc("M5").setValue(title, "M5").setValue(parent, "A2").setValue(color, "yellow"));
    Document a3 = asset.createDoc("A3").setValue(title, "A3").setValue(color, "green").addChild(marker.createDoc("M2").setValue(title, "M2").setValue(parent, "A3").setValue(color, "red"));
    Document a4 = asset.createDoc("A4").setValue(title, "A4").setValue(color, "blue").addChild(marker.createDoc("M3").setValue(title, "M3").setValue(parent, "A4").setValue(color, "blue"));
    server.index(a1);
    server.index(a2);
    server.index(a3);
    server.index(a4);
    server.commit();
    // Test whether sub-documents are automatically removed from index when full indexing a parent document without them
    a2.getChildren().clear();
    a2.addChild(marker.createDoc("M6").setValue(title, "M6").setValue(parent, "A2").setValue(color, "purple"));
    server.index(a2);
    server.commit();
    // search in all markers
    final GetResult getM6child = server.execute(Search.getById("M6"), marker);
    assertEquals("Subdocument with id:'M6' is indexed", 1, getM6child.getNumOfResults());
    // search in all markers
    final GetResult getM4child = server.execute(Search.getById("M4"), marker);
    assertEquals("subdocument with id:'M4' is no more in the index", 0, getM4child.getNumOfResults());
    // * The search UI displays the special facets "Assets" and "Markers" with according numbers matching the search criteria.
    SearchResult result = server.execute(Search.fulltext().orChildrenSearch(marker).facet(type()), asset);
    assertEquals("Asset Count", 4, result.getNumOfResults());
    // TODO assertEquals("Facet Asset count",4,result.getFacetResults().getTypeFacet().getValues().get(0).getCount());
    // TODO assertEquals("Facet Asset count",3,result.getFacetResults().getTypeFacet().getValues().get(1).getCount());
    // * If the user selects the "Markers" facet only the assets with markers will be displayed.
    result = server.execute(Search.fulltext().filter(hasChildrenDocuments(asset)), asset);
    assertEquals("Only Assets with markers", 3, result.getNumOfResults());
    // * No partial updates for markers yet (but likely to be requested, for example comments)
    // Test behaviour of sub-documents when performing partial updates in children documents.
    server.execute(Search.update("M6").set(title, "M6 seis"), marker);
    server.commit();
    result = server.execute(Search.fulltext().filter(eq(color, "purple", Scope.Suggest)).orChildrenSearch(marker), asset);
    assertEquals("Nested document M6 is still linked to A2 parent document", 1, result.getNumOfResults());
    // Test behabiour of sub-documents when full indexing a parent document after performing partial updates to
    // children documents
    a2.getChildren().clear();
    a2.addChild(marker.createDoc("M6").setValue(title, "M6 seis").setValue(color, "purple"));
    server.index(a2);
    server.commit();
    result = server.execute(Search.fulltext().filter(eq(color, "purple")).orChildrenSearch(marker), asset);
    assertEquals("Nested document M6 is still linked to A2 parent document", 1, result.getNumOfResults());
    // * Partial update are required for the asset.
    assertEquals(1, server.execute(Search.getById("A2"), asset).getNumOfResults());
    assertEquals(4, server.execute(Search.fulltext(), asset).getNumOfResults());
    // Test behaviour of sub-documents when performing partial updates in parent documents.
    server.execute(Search.update("A2").set(title, "A2 dos"), asset);
    server.commit();
    assertEquals(1, server.execute(Search.getById("A2"), asset).getNumOfResults());
    // assertEquals(4, server.execute(Search.fulltext(),asset).getNumOfResults()); TODO!!
    result = server.execute(Search.fulltext().filter(eq(color, "purple")).orChildrenSearch(marker), asset);
    assertEquals("Nested document M6 is still linked to A2 parent document", 1, result.getNumOfResults());
    // Test behabiour of sub-documents when full indexing a parent document after performing partial updates to
    // parent documents
    a2.setValue(title, "A2 dos");
    server.index(a2);
    server.commit();
    result = server.execute(Search.fulltext().filter(eq(color, "purple")).orChildrenSearch(marker), asset);
    assertEquals("Nested document M6 is still linked to A2 parent document", 1, result.getNumOfResults());
    // * The search uses one index configuration for both. The field names for markers and assets are the same (for
    // example a field "Person" of the asset is als available as "Person" on the Marker)
    server.clearIndex();
    server.commit();
}
Also used : GetResult(com.rbmhtechnology.vind.api.result.GetResult) SearchServer(com.rbmhtechnology.vind.api.SearchServer) SearchResult(com.rbmhtechnology.vind.api.result.SearchResult) Document(com.rbmhtechnology.vind.api.Document) SolrInputDocument(org.apache.solr.common.SolrInputDocument) Test(org.junit.Test)

Aggregations

SearchResult (com.rbmhtechnology.vind.api.result.SearchResult)38 Test (org.junit.Test)35 FulltextSearch (com.rbmhtechnology.vind.api.query.FulltextSearch)28 SearchServer (com.rbmhtechnology.vind.api.SearchServer)27 Document (com.rbmhtechnology.vind.api.Document)26 SolrInputDocument (org.apache.solr.common.SolrInputDocument)26 ZonedDateTime (java.time.ZonedDateTime)14 MultiValueFieldDescriptor (com.rbmhtechnology.vind.model.MultiValueFieldDescriptor)10 Interval (com.rbmhtechnology.vind.api.query.facet.Interval)9 DateMathExpression (com.rbmhtechnology.vind.api.query.datemath.DateMathExpression)8 Delete (com.rbmhtechnology.vind.api.query.delete.Delete)8 PageResult (com.rbmhtechnology.vind.api.result.PageResult)8 SuggestionResult (com.rbmhtechnology.vind.api.result.SuggestionResult)8 GetResult (com.rbmhtechnology.vind.api.result.GetResult)7 LatLng (com.rbmhtechnology.vind.model.value.LatLng)7 ByteBuffer (java.nio.ByteBuffer)7 Language (com.rbmhtechnology.vind.annotations.language.Language)6 Search (com.rbmhtechnology.vind.api.query.Search)6 TimeUnit (com.rbmhtechnology.vind.api.query.datemath.DateMathExpression.TimeUnit)6 Facets (com.rbmhtechnology.vind.api.query.facet.Facets)6