Search in sources :

Example 11 with Sort

use of io.zulia.client.command.builder.Sort in project zuliasearch by zuliaio.

the class SortTest method titleSort.

@Test
@Order(2)
public void titleSort() throws Exception {
    SearchResult searchResult;
    Search search = new Search(INDEX_NAME).setAmount(10);
    // default ascending missing first
    search.addSort(new Sort("title"));
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertNull(searchResult.getFirstDocument().get("title"));
    search.clearSort();
    // default missing first
    search.addSort(new Sort("title").ascending());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertNull(searchResult.getFirstDocument().get("title"));
    search.clearSort();
    search.addSort(new Sort("title").ascending().missingFirst());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertNull(searchResult.getFirstDocument().get("title"));
    search.clearSort();
    search.addSort(new Sort("title").ascending().missingLast());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertEquals("a special title", searchResult.getFirstDocument().get("title"));
    search.clearSort();
    // default missing first
    search.addSort(new Sort("title").descending());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertEquals("some title", searchResult.getFirstDocument().get("title"));
    search.clearSort();
    search.addSort(new Sort("title").descending().missingFirst());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertEquals("some title", searchResult.getFirstDocument().get("title"));
    search.clearSort();
    search.addSort(new Sort("title").descending().missingLast());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertNull(searchResult.getFirstDocument().get("title"));
}
Also used : Search(io.zulia.client.command.builder.Search) Sort(io.zulia.client.command.builder.Sort) SearchResult(io.zulia.client.result.SearchResult) Order(org.junit.jupiter.api.Order) TestMethodOrder(org.junit.jupiter.api.TestMethodOrder) Test(org.junit.jupiter.api.Test)

Example 12 with Sort

use of io.zulia.client.command.builder.Sort in project zuliasearch by zuliaio.

the class SortTest method scoreSort.

@Test
@Order(9)
public void scoreSort() throws Exception {
    SearchResult searchResult;
    Search search = new Search(INDEX_NAME).setAmount(10).addQuery(new ScoredQuery("title:special OR title:secret"));
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertEquals("40", searchResult.getFirstDocument().get("id"));
    search.clearSort();
    // default ascending
    search.addSort(new Sort(ZuliaConstants.SCORE_FIELD));
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertEquals("30", searchResult.getFirstDocument().get("id"));
    search.clearSort();
    search.addSort(new Sort(ZuliaConstants.SCORE_FIELD).descending());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertEquals("40", searchResult.getFirstDocument().get("id"));
}
Also used : ScoredQuery(io.zulia.client.command.builder.ScoredQuery) Search(io.zulia.client.command.builder.Search) Sort(io.zulia.client.command.builder.Sort) SearchResult(io.zulia.client.result.SearchResult) Order(org.junit.jupiter.api.Order) TestMethodOrder(org.junit.jupiter.api.TestMethodOrder) Test(org.junit.jupiter.api.Test)

Example 13 with Sort

use of io.zulia.client.command.builder.Sort in project zuliasearch by zuliaio.

the class SortTest method ratingSort.

@Test
@Order(5)
public void ratingSort() throws Exception {
    SearchResult searchResult;
    Search search = new Search(INDEX_NAME).setAmount(10);
    String field = "rating";
    // default ascending missing first
    search.addSort(new Sort(field));
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertNull(searchResult.getFirstDocument().get(field));
    search.clearSort();
    // default missing first
    search.addSort(new Sort(field).ascending());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertNull(searchResult.getFirstDocument().get(field));
    search.clearSort();
    search.addSort(new Sort(field).ascending().missingFirst());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertNull(searchResult.getFirstDocument().get(field));
    search.clearSort();
    search.addSort(new Sort(field).ascending().missingLast());
    searchResult = zuliaWorkPool.search(search);
    // mongodb bson does not support float so it comes back as a double, the search engine is indexing in float precision however
    Assertions.assertEquals(1.1f, (double) searchResult.getFirstDocument().get(field), 0.001f);
    search.clearSort();
    // default missing first
    search.addSort(new Sort(field).descending());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertEquals(5.0f, (double) searchResult.getFirstDocument().get(field), 0.001f);
    search.clearSort();
    search.addSort(new Sort(field).descending().missingFirst());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertEquals(5.0f, (double) searchResult.getFirstDocument().get(field), 0.001f);
    search.clearSort();
    search.addSort(new Sort(field).descending().missingLast());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertNull(searchResult.getFirstDocument().get(field));
}
Also used : Search(io.zulia.client.command.builder.Search) Sort(io.zulia.client.command.builder.Sort) SearchResult(io.zulia.client.result.SearchResult) Order(org.junit.jupiter.api.Order) TestMethodOrder(org.junit.jupiter.api.TestMethodOrder) Test(org.junit.jupiter.api.Test)

Example 14 with Sort

use of io.zulia.client.command.builder.Sort in project zuliasearch by zuliaio.

the class SortTest method reindexTest.

@Test
@Order(13)
public void reindexTest() throws Exception {
    ClientIndexConfig indexConfig = new ClientIndexConfig();
    indexConfig.addDefaultSearchField("title");
    indexConfig.addFieldConfig(FieldConfigBuilder.create("id", FieldType.STRING).indexAs(DefaultAnalyzers.LC_KEYWORD).sortAs(// change sort as to be theId instead of just id
    "theId"));
    indexConfig.addFieldConfig(FieldConfigBuilder.create("title", FieldType.STRING).indexAs(DefaultAnalyzers.STANDARD).sort());
    // no longer sortable
    indexConfig.addFieldConfig(FieldConfigBuilder.create("stars", FieldType.NUMERIC_INT).index());
    indexConfig.addFieldConfig(FieldConfigBuilder.create("starsLong", FieldType.NUMERIC_LONG).index().sort());
    // indexConfig.addFieldConfig(FieldConfigBuilder.create("rating", FieldType.NUMERIC_FLOAT).index().sort()); // no longer indexed or sortable
    indexConfig.addFieldConfig(FieldConfigBuilder.create("ratingDouble", FieldType.NUMERIC_FLOAT).index().sort());
    indexConfig.addFieldConfig(FieldConfigBuilder.create("special", FieldType.BOOL).index().sort());
    indexConfig.addFieldConfig(FieldConfigBuilder.create("added", FieldType.DATE).index().sort());
    // sort() adds standard string (case senstive sorting with a field name the same as the stored field
    // sortAs(LOWERCASE_FOLDING, "otherTitleFolding") add another sortable field with a lowercase and ascii folding filter applied to make case insensitive sort and fancy letter insensitive (gotta be a better term here)
    indexConfig.addFieldConfig(FieldConfigBuilder.create("otherTitle", FieldType.STRING).index().sort().sortAs(LOWERCASE_FOLDING, "otherTitleFolding"));
    indexConfig.setIndexName(INDEX_NAME);
    indexConfig.setNumberOfShards(1);
    // force some commits
    indexConfig.setShardCommitInterval(20);
    zuliaWorkPool.createIndex(indexConfig);
    zuliaWorkPool.reindex(new Reindex(INDEX_NAME));
    SearchResult searchResult;
    Search search = new Search(INDEX_NAME).setAmount(1);
    search.addSort(new Sort("otherTitle").ascending().missingLast());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertEquals("Blah", searchResult.getFirstDocument().get("otherTitle"));
    search.clearSort();
    search.addSort(new Sort("otherTitleFolding").ascending().missingLast());
    search.addSort(new Sort("starts").ascending().missingLast());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertEquals("blah", searchResult.getFirstDocument().get("otherTitle"));
    search.clearSort();
    search.addSort(new Sort("otherTitle").descending());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertEquals("still more blah", searchResult.getFirstDocument().get("otherTitle"));
    search.clearSort();
    // use the new sort as id field
    search.addSort(new Sort("theId").descending());
    searchResult = zuliaWorkPool.search(search);
    // sorting as string so this is 99 instead of 199
    Assertions.assertEquals("99", searchResult.getFirstDocument().get("id"));
}
Also used : Search(io.zulia.client.command.builder.Search) ClientIndexConfig(io.zulia.client.config.ClientIndexConfig) Sort(io.zulia.client.command.builder.Sort) SearchResult(io.zulia.client.result.SearchResult) Reindex(io.zulia.client.command.Reindex) Order(org.junit.jupiter.api.Order) TestMethodOrder(org.junit.jupiter.api.TestMethodOrder) Test(org.junit.jupiter.api.Test)

Example 15 with Sort

use of io.zulia.client.command.builder.Sort in project zuliasearch by zuliaio.

the class SortTest method dateSort.

@Test
@Order(8)
public void dateSort() throws Exception {
    SearchResult searchResult;
    Search search = new Search(INDEX_NAME).setAmount(10);
    String field = "added";
    // default ascending missing first
    search.addSort(new Sort(field));
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertNull(searchResult.getFirstDocument().get(field));
    search.clearSort();
    // default missing first
    search.addSort(new Sort(field).ascending());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertNull(searchResult.getFirstDocument().get(field));
    search.clearSort();
    search.addSort(new Sort(field).ascending().missingFirst());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertNull(searchResult.getFirstDocument().get(field));
    search.clearSort();
    search.addSort(new Sort(field).ascending().missingLast());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertEquals(Date.from(LocalDate.of(1951, Month.DECEMBER, 20).atStartOfDay(ZoneId.of("UTC")).toInstant()), searchResult.getFirstDocument().get(field));
    search.clearSort();
    // default missing first
    search.addSort(new Sort(field).descending());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertEquals(Date.from(LocalDate.of(2020, Month.JANUARY, 31).atStartOfDay(ZoneId.of("UTC")).toInstant()), searchResult.getFirstDocument().get(field));
    search.clearSort();
    search.addSort(new Sort(field).descending().missingFirst());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertEquals(Date.from(LocalDate.of(2020, Month.JANUARY, 31).atStartOfDay(ZoneId.of("UTC")).toInstant()), searchResult.getFirstDocument().get(field));
    search.clearSort();
    search.addSort(new Sort(field).descending().missingLast());
    searchResult = zuliaWorkPool.search(search);
    Assertions.assertNull(searchResult.getFirstDocument().get(field));
}
Also used : Search(io.zulia.client.command.builder.Search) Sort(io.zulia.client.command.builder.Sort) SearchResult(io.zulia.client.result.SearchResult) Order(org.junit.jupiter.api.Order) TestMethodOrder(org.junit.jupiter.api.TestMethodOrder) Test(org.junit.jupiter.api.Test)

Aggregations

Search (io.zulia.client.command.builder.Search)15 Sort (io.zulia.client.command.builder.Sort)15 SearchResult (io.zulia.client.result.SearchResult)14 Order (org.junit.jupiter.api.Order)13 Test (org.junit.jupiter.api.Test)13 TestMethodOrder (org.junit.jupiter.api.TestMethodOrder)13 ScoredQuery (io.zulia.client.command.builder.ScoredQuery)4 Document (org.bson.Document)3 Reindex (io.zulia.client.command.Reindex)2 FilterQuery (io.zulia.client.command.builder.FilterQuery)2 ClientIndexConfig (io.zulia.client.config.ClientIndexConfig)2 ZuliaQuery (io.zulia.message.ZuliaQuery)2 JCommander (com.beust.jcommander.JCommander)1 ParameterException (com.beust.jcommander.ParameterException)1 ClearIndex (io.zulia.client.command.ClearIndex)1 DeleteIndex (io.zulia.client.command.DeleteIndex)1 GetIndexes (io.zulia.client.command.GetIndexes)1 GetNodes (io.zulia.client.command.GetNodes)1 GetNumberOfDocs (io.zulia.client.command.GetNumberOfDocs)1 OptimizeIndex (io.zulia.client.command.OptimizeIndex)1