{"record":{"id":"4657f05596cb4b43","repo":"languagetool-org/languagetool","slug":"no-items-found-in-rule-that-can-be-used-to-build-a","errorCode":null,"errorMessage":"No items found in rule that can be used to build a search query: + rule","messagePattern":"No items found in rule that can be used to build a search query: \\+ rule","errorType":"exception","errorClass":"UnsupportedPatternRuleException","httpStatus":null,"severity":"error","filePath":"languagetool-wikipedia/src/main/java/org/languagetool/dev/index/PatternRuleQueryBuilder.java","lineNumber":86,"sourceCode":"   * Iterate over all elements, ignore those not supported, add the other ones to a BooleanQuery.\n   * @throws UnsupportedPatternRuleException if no query could be created for the rule\n   */\n  public Query buildRelaxedQuery(AbstractPatternRule rule) throws UnsupportedPatternRuleException {\n    BooleanQuery.Builder builder = new BooleanQuery.Builder();\n    for (PatternToken patternToken : rule.getPatternTokens()) {\n      try {\n        BooleanClause clause = makeQuery(patternToken);\n        builder.add(clause);\n      } catch (UnsupportedPatternRuleException e) {\n        //System.out.println(\"Ignoring because it's not supported: \" + element + \": \" + e);\n        // cannot handle - okay to ignore, as we may return too broad matches\n      } catch (Exception e) {\n        throw new RuntimeException(\"Could not create query for rule \" + rule.getId(), e);\n      }\n    }\n    BooleanQuery query = builder.build();\n    if (query.clauses().isEmpty()) {\n      throw new UnsupportedPatternRuleException(\"No items found in rule that can be used to build a search query: \" + rule);\n    }\n    return query;\n  }\n\n  private BooleanClause makeQuery(PatternToken patternToken) throws UnsupportedPatternRuleException {\n    checkUnsupportedElement(patternToken);\n\n    String termStr = patternToken.getString();\n    String pos = patternToken.getPOStag();\n\n    BooleanClause termQuery = getTermQueryOrNull(patternToken, termStr);\n    BooleanClause posQuery = getPosQueryOrNull(patternToken, pos);\n\n    if (termQuery != null && posQuery != null) {\n      // if both term and POS are set, we create a query where both are at the same position\n      if (mustOccur(termQuery) && mustOccur(posQuery)) {\n        SpanQuery spanQueryForTerm = asSpanQuery(termQuery);\n        SpanQuery spanQueryForPos = asSpanQuery(posQuery);","sourceCodeStart":68,"sourceCodeEnd":104,"githubUrl":"https://github.com/languagetool-org/languagetool/blob/2e990059ce67d5e2a0f7f7ca5d31160c6709df4b/languagetool-wikipedia/src/main/java/org/languagetool/dev/index/PatternRuleQueryBuilder.java#L68-L104","documentation":"Search-index guard in buildRelaxedQuery: none of the rule's pattern tokens yielded a usable Lucene clause (all were unsupported or empty), so the resulting BooleanQuery would match nothing.","triggerScenarios":"Thrown at languagetool-wikipedia/src/main/java/org/languagetool/dev/index/PatternRuleQueryBuilder.java:86 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Give the rule at least one token with a term or POS tag","Skip this rule when indexing; it cannot be searched with the current builder"],"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"}