Class QueryExpander

java.lang.Object
dev.agenor.runtime.knowledge.QueryExpander

public class QueryExpander extends Object
Expands search queries with synonyms to improve recall.

Synonym groups are registered at construction time (or lazily via addSynonyms(java.lang.String...)). When expand(java.lang.String) is called, every token in the query that matches a known term is augmented with all its synonyms. The expanded query can then be passed to KnowledgeStore.search(java.lang.String, int).

Example:


 QueryExpander expander = new QueryExpander();
 expander.addSynonyms("refund", "return", "money back");
 expander.addSynonyms("cancel", "cancellation", "void");

 String expanded = expander.expand("I want a refund");
 // → "i want a refund return money back"

 List<KnowledgeDocument<...>> docs = store.search(expanded, 5);
 

Synonym matching is case-insensitive; the expanded query is lowercase. This class is not thread-safe. If synonym groups are registered concurrently, external synchronisation is required.

  • Constructor Details

    • QueryExpander

      public QueryExpander()
  • Method Details

    • addSynonyms

      public void addSynonyms(String... terms)
      Registers a synonym group.

      Each term in the group is mapped to all other terms in the group. Terms are stored and matched in lower case. Calling this method multiple times with overlapping terms is allowed; new synonyms are merged into the existing group.

      Parameters:
      terms - two or more synonymous terms (non-null, non-empty)
    • expand

      public String expand(String query)
      Expands the query by appending synonyms for every recognised token.

      The original tokens are preserved at the start of the result, followed by any added synonyms. Duplicate tokens are deduplicated (insertion order preserved).

      Parameters:
      query - original query string (may be null or blank)
      Returns:
      expanded query as a space-separated string; returns query unchanged if it is null or blank