mirror of
https://github.com/typesense/typesense.git
synced 2025-05-19 05:08:43 +08:00
separate out parent field from value
This commit is contained in:
parent
c250967d71
commit
045a39f2b5
@ -687,6 +687,7 @@ struct facet_value_t {
|
||||
std::string highlighted;
|
||||
uint32_t count;
|
||||
int64_t sort_field_val;
|
||||
std::string parent;
|
||||
};
|
||||
|
||||
struct facet_hash_values_t {
|
||||
|
@ -2335,7 +2335,7 @@ Option<nlohmann::json> Collection::search(std::string raw_query,
|
||||
for(size_t fi = 0; fi < max_facets; fi++) {
|
||||
// remap facet value hash with actual string
|
||||
auto & facet_count = facet_counts[fi];
|
||||
std::string value;
|
||||
std::string value, parent;
|
||||
nlohmann::json document;
|
||||
|
||||
if(should_fetch_doc_from_store) {
|
||||
@ -2360,7 +2360,7 @@ Option<nlohmann::json> Collection::search(std::string raw_query,
|
||||
}
|
||||
|
||||
if(the_field.nested && should_return_parent) {
|
||||
value = get_facet_parent(the_field.name, document);
|
||||
parent = get_facet_parent(the_field.name, document);
|
||||
}
|
||||
|
||||
std::unordered_map<std::string, size_t> ftoken_pos;
|
||||
@ -2433,7 +2433,8 @@ Option<nlohmann::json> Collection::search(std::string raw_query,
|
||||
highlightedss << value[i];
|
||||
i++;
|
||||
}
|
||||
facet_value_t facet_value = {value, highlightedss.str(), facet_count.count, facet_count.sort_field_val};
|
||||
facet_value_t facet_value = {value, highlightedss.str(), facet_count.count,
|
||||
facet_count.sort_field_val, parent};
|
||||
facet_values.emplace_back(facet_value);
|
||||
}
|
||||
}
|
||||
@ -2469,6 +2470,10 @@ Option<nlohmann::json> Collection::search(std::string raw_query,
|
||||
facet_value_count["value"] = value;
|
||||
facet_value_count["highlighted"] = facet_count.highlighted;
|
||||
facet_value_count["count"] = facet_count.count;
|
||||
|
||||
if(!facet_count.parent.empty()) {
|
||||
facet_value_count["parent"] = facet_count.parent;
|
||||
}
|
||||
facet_result["counts"].push_back(facet_value_count);
|
||||
}
|
||||
|
||||
|
@ -1777,8 +1777,10 @@ TEST_F(CollectionFacetingTest, FacetingReturnParent) {
|
||||
auto results = search_op.get();
|
||||
ASSERT_EQ(1, results["facet_counts"].size());
|
||||
ASSERT_EQ(2, results["facet_counts"][0]["counts"].size());
|
||||
ASSERT_EQ("{\"b\":0,\"color\":\"red\",\"g\":0,\"r\":255}", results["facet_counts"][0]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"b\":255,\"color\":\"blue\",\"g\":0,\"r\":0}", results["facet_counts"][0]["counts"][1]["value"]);
|
||||
ASSERT_EQ("{\"b\":0,\"color\":\"red\",\"g\":0,\"r\":255}", results["facet_counts"][0]["counts"][0]["parent"]);
|
||||
ASSERT_EQ("red", results["facet_counts"][0]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"b\":255,\"color\":\"blue\",\"g\":0,\"r\":0}", results["facet_counts"][0]["counts"][1]["parent"]);
|
||||
ASSERT_EQ("blue", results["facet_counts"][0]["counts"][1]["value"]);
|
||||
|
||||
//not passing facet_fields in facet_return_parent list will only return facet value, not immediate parent for those field
|
||||
search_op = coll1->search("*", {},"", {"value.color"},
|
||||
@ -1833,8 +1835,10 @@ TEST_F(CollectionFacetingTest, FacetingReturnParent) {
|
||||
ASSERT_EQ("blue", results["facet_counts"][0]["counts"][1]["value"]);
|
||||
|
||||
ASSERT_EQ(2, results["facet_counts"][1]["counts"].size());
|
||||
ASSERT_EQ("{\"b\":0,\"color\":\"red\",\"g\":0,\"r\":255}", results["facet_counts"][1]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"b\":255,\"color\":\"blue\",\"g\":0,\"r\":0}", results["facet_counts"][1]["counts"][1]["value"]);
|
||||
ASSERT_EQ("{\"b\":255,\"color\":\"blue\",\"g\":0,\"r\":0}", results["facet_counts"][1]["counts"][0]["parent"]);
|
||||
ASSERT_EQ("0", results["facet_counts"][1]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"b\":0,\"color\":\"red\",\"g\":0,\"r\":255}", results["facet_counts"][1]["counts"][1]["parent"]);
|
||||
ASSERT_EQ("255", results["facet_counts"][1]["counts"][1]["value"]);
|
||||
}
|
||||
|
||||
TEST_F(CollectionFacetingTest, FacetingReturnParentDeepNested) {
|
||||
@ -1897,8 +1901,10 @@ TEST_F(CollectionFacetingTest, FacetingReturnParentDeepNested) {
|
||||
auto results = search_op.get();
|
||||
ASSERT_EQ(1, results["facet_counts"].size());
|
||||
ASSERT_EQ(2, results["facet_counts"][0]["counts"].size());
|
||||
ASSERT_EQ("{\"specification\":{\"detail\":{\"width\":30}}}", results["facet_counts"][0]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"specification\":{\"detail\":{\"width\":25}}}", results["facet_counts"][0]["counts"][1]["value"]);
|
||||
ASSERT_EQ("{\"specification\":{\"detail\":{\"width\":30}}}", results["facet_counts"][0]["counts"][0]["parent"]);
|
||||
ASSERT_EQ("30", results["facet_counts"][0]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"specification\":{\"detail\":{\"width\":25}}}", results["facet_counts"][0]["counts"][1]["parent"]);
|
||||
ASSERT_EQ("25", results["facet_counts"][0]["counts"][1]["value"]);
|
||||
}
|
||||
|
||||
TEST_F(CollectionFacetingTest, FacetingReturnParentObject) {
|
||||
@ -1959,8 +1965,10 @@ TEST_F(CollectionFacetingTest, FacetingReturnParentObject) {
|
||||
auto results = search_op.get();
|
||||
ASSERT_EQ(1, results["facet_counts"].size());
|
||||
ASSERT_EQ(2, results["facet_counts"][0]["counts"].size());
|
||||
ASSERT_EQ("{\"b\":0,\"color\":\"red\",\"g\":0,\"r\":255}", results["facet_counts"][0]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"b\":255,\"color\":\"blue\",\"g\":0,\"r\":0}", results["facet_counts"][0]["counts"][1]["value"]);
|
||||
ASSERT_EQ("{\"b\":0,\"color\":\"red\",\"g\":0,\"r\":255}", results["facet_counts"][0]["counts"][0]["parent"]);
|
||||
ASSERT_EQ("red", results["facet_counts"][0]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"b\":255,\"color\":\"blue\",\"g\":0,\"r\":0}", results["facet_counts"][0]["counts"][1]["parent"]);
|
||||
ASSERT_EQ("blue", results["facet_counts"][0]["counts"][1]["value"]);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1503,8 +1503,10 @@ TEST_F(CollectionOptimizedFacetingTest, FacetingReturnParent) {
|
||||
auto results = search_op.get();
|
||||
ASSERT_EQ(1, results["facet_counts"].size());
|
||||
ASSERT_EQ(2, results["facet_counts"][0]["counts"].size());
|
||||
ASSERT_EQ("{\"b\":0,\"color\":\"red\",\"g\":0,\"r\":255}", results["facet_counts"][0]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"b\":255,\"color\":\"blue\",\"g\":0,\"r\":0}", results["facet_counts"][0]["counts"][1]["value"]);
|
||||
ASSERT_EQ("{\"b\":0,\"color\":\"red\",\"g\":0,\"r\":255}", results["facet_counts"][0]["counts"][0]["parent"]);
|
||||
ASSERT_EQ("red", results["facet_counts"][0]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"b\":255,\"color\":\"blue\",\"g\":0,\"r\":0}", results["facet_counts"][0]["counts"][1]["parent"]);
|
||||
ASSERT_EQ("blue", results["facet_counts"][0]["counts"][1]["value"]);
|
||||
|
||||
//not passing facet_fields in facet_return_parent list will only return facet value, not immediate parent for those field
|
||||
search_op = coll1->search("*", {},"", {"value.color"},
|
||||
@ -1559,8 +1561,10 @@ TEST_F(CollectionOptimizedFacetingTest, FacetingReturnParent) {
|
||||
ASSERT_EQ("blue", results["facet_counts"][0]["counts"][1]["value"]);
|
||||
|
||||
ASSERT_EQ(2, results["facet_counts"][1]["counts"].size());
|
||||
ASSERT_EQ("{\"b\":0,\"color\":\"red\",\"g\":0,\"r\":255}", results["facet_counts"][1]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"b\":255,\"color\":\"blue\",\"g\":0,\"r\":0}", results["facet_counts"][1]["counts"][1]["value"]);
|
||||
ASSERT_EQ("{\"b\":255,\"color\":\"blue\",\"g\":0,\"r\":0}", results["facet_counts"][1]["counts"][0]["parent"]);
|
||||
ASSERT_EQ("0", results["facet_counts"][1]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"b\":0,\"color\":\"red\",\"g\":0,\"r\":255}", results["facet_counts"][1]["counts"][1]["parent"]);
|
||||
ASSERT_EQ("255", results["facet_counts"][1]["counts"][1]["value"]);
|
||||
}
|
||||
|
||||
TEST_F(CollectionOptimizedFacetingTest, FacetingReturnParentDeepNested) {
|
||||
@ -1623,8 +1627,10 @@ TEST_F(CollectionOptimizedFacetingTest, FacetingReturnParentDeepNested) {
|
||||
auto results = search_op.get();
|
||||
ASSERT_EQ(1, results["facet_counts"].size());
|
||||
ASSERT_EQ(2, results["facet_counts"][0]["counts"].size());
|
||||
ASSERT_EQ("{\"specification\":{\"detail\":{\"width\":30}}}", results["facet_counts"][0]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"specification\":{\"detail\":{\"width\":25}}}", results["facet_counts"][0]["counts"][1]["value"]);
|
||||
ASSERT_EQ("{\"specification\":{\"detail\":{\"width\":30}}}", results["facet_counts"][0]["counts"][0]["parent"]);
|
||||
ASSERT_EQ("30", results["facet_counts"][0]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"specification\":{\"detail\":{\"width\":25}}}", results["facet_counts"][0]["counts"][1]["parent"]);
|
||||
ASSERT_EQ("25", results["facet_counts"][0]["counts"][1]["value"]);
|
||||
}
|
||||
|
||||
TEST_F(CollectionOptimizedFacetingTest, FacetingReturnParentObject) {
|
||||
@ -1685,8 +1691,10 @@ TEST_F(CollectionOptimizedFacetingTest, FacetingReturnParentObject) {
|
||||
auto results = search_op.get();
|
||||
ASSERT_EQ(1, results["facet_counts"].size());
|
||||
ASSERT_EQ(2, results["facet_counts"][0]["counts"].size());
|
||||
ASSERT_EQ("{\"b\":0,\"color\":\"red\",\"g\":0,\"r\":255}", results["facet_counts"][0]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"b\":255,\"color\":\"blue\",\"g\":0,\"r\":0}", results["facet_counts"][0]["counts"][1]["value"]);
|
||||
ASSERT_EQ("{\"b\":0,\"color\":\"red\",\"g\":0,\"r\":255}", results["facet_counts"][0]["counts"][0]["parent"]);
|
||||
ASSERT_EQ("red", results["facet_counts"][0]["counts"][0]["value"]);
|
||||
ASSERT_EQ("{\"b\":255,\"color\":\"blue\",\"g\":0,\"r\":0}", results["facet_counts"][0]["counts"][1]["parent"]);
|
||||
ASSERT_EQ("blue", results["facet_counts"][0]["counts"][1]["value"]);
|
||||
}
|
||||
|
||||
TEST_F(CollectionOptimizedFacetingTest, FacetSortByAlpha) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user