Soon
04/17/2026, 6:00 PMWHERE TEXT_MATCH(indexedString3, '/.*nav#primary-menu.*/') and its not matching a row with nav#primary-menu. My theory this is due to that special character # and that standard analyzer breaks them up into tokens like nav and primary-menu and never keep them as a whole. Would be greatly helpful if someone could confirm my theory! Thanks in advance!Mayank
Raghvendra Yadav
04/17/2026, 8:15 PM// StandardAnalyzer (Pinot's default) splits on '#' and '-'
// "nav#primary-menu" → ["nav", "primary", "menu"]
// Regex /.*nav#primary-menu.*/ has nothing to match → 0 results
// WhitespaceAnalyzer keeps the full value as one token
// "nav#primary-menu" → ["nav#primary-menu"]
// Regex /.*nav#primary-menu.*/ matches → results returned
@Test
public void testSpecialCharTokenizationExplainsRegexBug() throws
Exception {
String text = "nav#primary-menu";
List<String> expectedStandardTokens = new ArrayList<>();
expectedStandardTokens.add("nav");
expectedStandardTokens.add("primary");
expectedStandardTokens.add("menu");
List<String> expectedWhitespaceTokens = new ArrayList<>();
expectedWhitespaceTokens.add("nav#primary-menu");
try (CaseAwareStandardAnalyzer standardAnalyzer = new
CaseAwareStandardAnalyzer()) {
Assert.assertEquals(tokenize(standardAnalyzer, text),
expectedStandardTokens);
}
try (WhitespaceAnalyzer whitespaceAnalyzer = new
WhitespaceAnalyzer()) {
Assert.assertEquals(tokenize(whitespaceAnalyzer, text),
expectedWhitespaceTokens);
}
}Soon
04/17/2026, 8:27 PMSoon
04/20/2026, 3:18 PMTEXT_MATCH (indexedString3, '"nav\#primary-menu"') it actually matches the token 🤔Soon
04/20/2026, 3:20 PMnav#primary-menu => [nav, primary, menu, nav#primary, nav#primary-menu]Raghvendra Yadav
04/20/2026, 4:41 PMRaghvendra Yadav
04/20/2026, 4:42 PMSoon
04/20/2026, 4:55 PMto create virtual derived column and enable text index with different analyzer.Gotcha, thank you. Will explore this path!