{"record":{"id":"9e4060350b4c4acb","repo":"languagetool-org/languagetool","slug":"could-not-build-lucene-query-for-patterntoken","errorCode":null,"errorMessage":"Could not build Lucene query for '\" + patternToken + \"' and '\" + termStr + \"'","messagePattern":"Could not build Lucene query for '\" \\+ patternToken \\+ \"' and '\" \\+ termStr \\+ \"'","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"languagetool-wikipedia/src/main/java/org/languagetool/dev/index/PatternRuleQueryBuilder.java","lineNumber":175,"sourceCode":"      /*\n      This is simpler, but leads to problem with e.g. German rules ZEITLICH_SYNCHRON and GEWISSEN_SUBST:\n      Term lemmaQueryTerm = getQueryTerm(element, LEMMA_PREFIX, termStr, \"\");\n      Query query = new TermQuery(lemmaQueryTerm);\n      return new BooleanClause(query, BooleanClause.Occur.MUST);\n      */\n      Synthesizer synthesizer = language.getSynthesizer();\n      if (synthesizer != null) {\n        try {\n          String[] synthesized = synthesizer.synthesize(new AnalyzedToken(termStr, null, termStr), \".*\", true);\n          Query query;\n          if (synthesized.length == 0) {\n            query = new TermQuery(termQueryTerm);\n          } else {\n            query = new RegexpQuery(getTermQueryTerm(StringUtils.join(synthesized, \"|\")));\n          }\n          return new BooleanClause(query, BooleanClause.Occur.MUST);\n        } catch (IOException e) {\n          throw new RuntimeException(\"Could not build Lucene query for '\" + patternToken + \"' and '\" + termStr + \"'\", e);\n        }\n      }\n      return null;\n    } else if (patternToken.isRegularExpression()) {\n      termQuery = getRegexQuery(termQueryTerm, termStr, patternToken);\n    } else {\n      termQuery = new TermQuery(termQueryTerm);\n    }\n    return new BooleanClause(termQuery, BooleanClause.Occur.MUST);\n  }\n\n  // regex syntax not supported, but doesn't matter - remove or simplify it:\n  private String simplifyRegex(String regex) {\n    return regex.replace(\"(?:\", \"(\").replace(\"\\\\d\", \"[0-9]\").replace(\"\\\\w\", \"[a-zA-Z_0-9]\");\n  }\n\n  // the new and fast Regex query of Lucene doesn't support full Java regex syntax:\n  private boolean needsSimplification(String regex) {","sourceCodeStart":157,"sourceCodeEnd":193,"githubUrl":"https://github.com/languagetool-org/languagetool/blob/2e990059ce67d5e2a0f7f7ca5d31160c6709df4b/languagetool-wikipedia/src/main/java/org/languagetool/dev/index/PatternRuleQueryBuilder.java#L157-L193","documentation":"Search-index guard in getTermQueryOrNull: synthesizing word forms for the token (to expand lemma matching via the language's Synthesizer) failed, so a Lucene term query for that token cannot be built.","triggerScenarios":"Thrown at languagetool-wikipedia/src/main/java/org/languagetool/dev/index/PatternRuleQueryBuilder.java:175 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the language's synthesizer dictionary is available and consistent","Use a plain term instead of a lemma on that element","Skip the rule for index-based checking"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"2e990059ce67d5e2a0f7f7ca5d31160c6709df4b","analyzedAt":"2026-09-06T09:20:17.015Z","contentChangedAt":"2026-09-06T09:20:17.015Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}