feat: add support for tag:nc:... searches

This commit is contained in:
llama 2025-09-13 17:45:30 +08:00
parent 3890e12c9e
commit e506446224
No known key found for this signature in database
GPG key ID: 0B7543854B9413C3
2 changed files with 18 additions and 2 deletions

View file

@ -392,6 +392,11 @@ fn parse_tag(s: &str) -> ParseResult<'_, SearchNode> {
tag: unescape_quotes(re), tag: unescape_quotes(re),
mode: FieldSearchMode::Regex, mode: FieldSearchMode::Regex,
} }
} else if let Some(nc) = s.strip_prefix("nc:") {
SearchNode::Tag {
tag: unescape(nc)?,
mode: FieldSearchMode::NoCombining,
}
} else { } else {
SearchNode::Tag { SearchNode::Tag {
tag: unescape(s)?, tag: unescape(s)?,

View file

@ -311,8 +311,19 @@ impl SqlWriter<'_> {
} }
s if s.contains(' ') => write!(self.sql, "false").unwrap(), s if s.contains(' ') => write!(self.sql, "false").unwrap(),
text => { text => {
let text = if mode == FieldSearchMode::Normal {
write!(self.sql, "n.tags regexp ?").unwrap(); write!(self.sql, "n.tags regexp ?").unwrap();
let re = &to_custom_re(text, r"\S"); Cow::from(text)
} else {
write!(
self.sql,
"coalesce(process_text(n.tags, {}), n.tags) regexp ?",
ProcessTextFlags::NoCombining.bits()
)
.unwrap();
without_combining(text)
};
let re = &to_custom_re(&text, r"\S");
self.args.push(format!("(?i).* {re}(::| ).*")); self.args.push(format!("(?i).* {re}(::| ).*"));
} }
} }