Fix Tag Filtering
This commit is contained in:
@@ -206,6 +206,8 @@ public class StoryController {
|
||||
@RequestParam(required = false) String sortBy,
|
||||
@RequestParam(required = false) String sortDir) {
|
||||
|
||||
logger.info("CONTROLLER DEBUG: Search request - query='{}', tags={}, authors={}", query, tags, authors);
|
||||
|
||||
if (typesenseService != null) {
|
||||
SearchResultDto<StorySearchDto> results = typesenseService.searchStories(
|
||||
query, page, size, authors, tags, minRating, maxRating, sortBy, sortDir);
|
||||
|
||||
@@ -177,6 +177,9 @@ public class TypesenseService {
|
||||
try {
|
||||
long startTime = System.currentTimeMillis();
|
||||
|
||||
logger.info("SEARCH DEBUG: searchStories called with query='{}', tagFilters={}, authorFilters={}",
|
||||
query, tagFilters, authorFilters);
|
||||
|
||||
// Convert 0-based page (frontend/backend) to 1-based page (Typesense)
|
||||
int typesensePage = page + 1;
|
||||
|
||||
@@ -207,9 +210,16 @@ public class TypesenseService {
|
||||
}
|
||||
|
||||
if (tagFilters != null && !tagFilters.isEmpty()) {
|
||||
logger.info("SEARCH DEBUG: Processing {} tag filters: {}", tagFilters.size(), tagFilters);
|
||||
String tagFilter = tagFilters.stream()
|
||||
.map(tag -> "tagNames:=" + escapeTypesenseValue(tag))
|
||||
.map(tag -> {
|
||||
String escaped = escapeTypesenseValue(tag);
|
||||
String condition = "tagNames:=" + escaped;
|
||||
logger.info("SEARCH DEBUG: Tag '{}' -> escaped '{}' -> condition '{}'", tag, escaped, condition);
|
||||
return condition;
|
||||
})
|
||||
.collect(Collectors.joining(" || "));
|
||||
logger.info("SEARCH DEBUG: Final tag filter condition: '{}'", tagFilter);
|
||||
filterConditions.add("(" + tagFilter + ")");
|
||||
}
|
||||
|
||||
@@ -222,13 +232,19 @@ public class TypesenseService {
|
||||
}
|
||||
|
||||
if (!filterConditions.isEmpty()) {
|
||||
searchParameters.filterBy(String.join(" && ", filterConditions));
|
||||
String finalFilter = String.join(" && ", filterConditions);
|
||||
logger.info("SEARCH DEBUG: Final filter condition: '{}'", finalFilter);
|
||||
searchParameters.filterBy(finalFilter);
|
||||
} else {
|
||||
logger.info("SEARCH DEBUG: No filter conditions applied");
|
||||
}
|
||||
|
||||
SearchResult searchResult = typesenseClient.collections(STORIES_COLLECTION)
|
||||
.documents()
|
||||
.search(searchParameters);
|
||||
|
||||
logger.info("SEARCH DEBUG: Typesense returned {} results", searchResult.getFound());
|
||||
|
||||
List<StorySearchDto> results = convertSearchResult(searchResult);
|
||||
long searchTime = System.currentTimeMillis() - startTime;
|
||||
|
||||
@@ -338,7 +354,10 @@ public class TypesenseService {
|
||||
List<String> tagNames = story.getTags().stream()
|
||||
.map(tag -> tag.getName())
|
||||
.collect(Collectors.toList());
|
||||
logger.debug("INDEXING DEBUG: Story '{}' has tags: {}", story.getTitle(), tagNames);
|
||||
document.put("tagNames", tagNames);
|
||||
} else {
|
||||
logger.debug("INDEXING DEBUG: Story '{}' has no tags", story.getTitle());
|
||||
}
|
||||
|
||||
document.put("rating", story.getRating() != null ? story.getRating() : 0);
|
||||
|
||||
Reference in New Issue
Block a user