Bugfixes
This commit is contained in:
@@ -201,14 +201,14 @@ public class TypesenseService {
|
||||
|
||||
if (authorFilters != null && !authorFilters.isEmpty()) {
|
||||
String authorFilter = authorFilters.stream()
|
||||
.map(author -> "authorName:=" + author)
|
||||
.map(author -> "authorName:=" + escapeTypesenseValue(author))
|
||||
.collect(Collectors.joining(" || "));
|
||||
filterConditions.add("(" + authorFilter + ")");
|
||||
}
|
||||
|
||||
if (tagFilters != null && !tagFilters.isEmpty()) {
|
||||
String tagFilter = tagFilters.stream()
|
||||
.map(tag -> "tagNames:=" + tag)
|
||||
.map(tag -> "tagNames:=" + escapeTypesenseValue(tag))
|
||||
.collect(Collectors.joining(" || "));
|
||||
filterConditions.add("(" + tagFilter + ")");
|
||||
}
|
||||
@@ -890,4 +890,31 @@ public class TypesenseService {
|
||||
return Map.of("error", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Escape special characters in Typesense filter values.
|
||||
* Typesense requires certain characters to be escaped or quoted.
|
||||
*/
|
||||
private String escapeTypesenseValue(String value) {
|
||||
if (value == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
// If the value contains spaces, special characters, or quotes, wrap it in backticks
|
||||
if (value.contains(" ") || value.contains("'") || value.contains("\"") ||
|
||||
value.contains("(") || value.contains(")") || value.contains("[") ||
|
||||
value.contains("]") || value.contains("{") || value.contains("}") ||
|
||||
value.contains(":") || value.contains("=") || value.contains("&") ||
|
||||
value.contains("|") || value.contains("!") || value.contains("<") ||
|
||||
value.contains(">") || value.contains("@") || value.contains("#") ||
|
||||
value.contains("$") || value.contains("%") || value.contains("^") ||
|
||||
value.contains("*") || value.contains("+") || value.contains("?") ||
|
||||
value.contains("\\") || value.contains("/") || value.contains("~") ||
|
||||
value.contains("`")) {
|
||||
// Escape backticks in the value and wrap with backticks
|
||||
return "`" + value.replace("`", "\\`") + "`";
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user