mirror of
https://github.com/typesense/typesense.git
synced 2025-05-21 22:33:27 +08:00
Allow :=
filter syntax for non-string fields.
Though it makes no difference.
This commit is contained in:
parent
eb0e5b9d1e
commit
97394c146a
@ -542,6 +542,13 @@ Option<nlohmann::json> Collection::search(const std::string & query, const std::
|
||||
std::string & raw_value = expression_parts[1];
|
||||
filter f;
|
||||
|
||||
// skip past optional `:=` operator, which has no meaning for non-string fields
|
||||
if(!_field.is_string() && raw_value[0] == '=') {
|
||||
size_t filter_value_index = 0;
|
||||
while(raw_value[++filter_value_index] == ' ');
|
||||
raw_value = raw_value.substr(filter_value_index);
|
||||
}
|
||||
|
||||
if(_field.is_integer() || _field.is_float()) {
|
||||
// could be a single value or a list
|
||||
if(raw_value[0] == '[' && raw_value[raw_value.size() - 1] == ']') {
|
||||
|
@ -57,7 +57,7 @@ void catch_crash(int sig) {
|
||||
|
||||
Option<std::string> fetch_file_contents(const std::string & file_path) {
|
||||
if(!file_exists(file_path)) {
|
||||
return Option<std::string>(404, "File does not exist.");
|
||||
return Option<std::string>(404, std::string("File does not exist at: ") + file_path);
|
||||
}
|
||||
|
||||
std::ifstream infile(file_path);
|
||||
|
@ -1056,6 +1056,13 @@ TEST_F(CollectionTest, FilterOnNumericFields) {
|
||||
results = coll_array_fields->search("Jeremy", query_fields, "age:24", facets, sort_fields, 0, 10, 1, FREQUENCY, false).get();
|
||||
ASSERT_EQ(1, results["hits"].size());
|
||||
|
||||
// alternative `:=` syntax
|
||||
results = coll_array_fields->search("Jeremy", query_fields, "age:=24", facets, sort_fields, 0, 10, 1, FREQUENCY, false).get();
|
||||
ASSERT_EQ(1, results["hits"].size());
|
||||
|
||||
results = coll_array_fields->search("Jeremy", query_fields, "age:= 24", facets, sort_fields, 0, 10, 1, FREQUENCY, false).get();
|
||||
ASSERT_EQ(1, results["hits"].size());
|
||||
|
||||
// Searching a number against an int32 array field
|
||||
results = coll_array_fields->search("Jeremy", query_fields, "years:>2002", facets, sort_fields, 0, 10, 1, FREQUENCY, false).get();
|
||||
ASSERT_EQ(3, results["hits"].size());
|
||||
@ -1103,6 +1110,10 @@ TEST_F(CollectionTest, FilterOnNumericFields) {
|
||||
ASSERT_STREQ(id.c_str(), result_id.c_str());
|
||||
}
|
||||
|
||||
// alternative `:=` syntax
|
||||
results = coll_array_fields->search("Jeremy", query_fields, "age:= [21, 24, 63]", facets, sort_fields, 0, 10, 1, FREQUENCY, false).get();
|
||||
ASSERT_EQ(3, results["hits"].size());
|
||||
|
||||
// multiple search values against an int32 array field - also use extra padding between symbols
|
||||
results = coll_array_fields->search("Jeremy", query_fields, "years : [ 2015, 1985 , 1999]", facets, sort_fields, 0, 10, 1, FREQUENCY, false).get();
|
||||
ASSERT_EQ(4, results["hits"].size());
|
||||
@ -1460,6 +1471,10 @@ TEST_F(CollectionTest, QueryBoolFields) {
|
||||
ASSERT_STREQ(id.c_str(), result_id.c_str());
|
||||
}
|
||||
|
||||
// alternative `:=` syntax
|
||||
results = coll_bool->search("the", query_fields, "popular:=true", facets, sort_fields, 0, 10, 1, FREQUENCY, false).get();
|
||||
ASSERT_EQ(3, results["hits"].size());
|
||||
|
||||
results = coll_bool->search("the", query_fields, "popular:false", facets, sort_fields, 0, 10, 1, FREQUENCY, false).get();
|
||||
ASSERT_EQ(2, results["hits"].size());
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user