A query is a clue to what someone wants, not a complete statement of it. User intent is the goal or information need behind a search interaction. An engine serves that intent by returning relevant content, an answer, or a path to an action—not merely documents containing the query words. section 2.5.5 section 15.7
Interpreting intent combines three kinds of understanding: content (words and document attributes), user (preferences and context), and domain (the meanings and relationships of terms). Keyword search primarily supplies content matching; collaborative recommendations contribute user understanding; semantic search contributes domain understanding. Their overlap supports results that fit both the query and the person issuing it. section 1.2.5 section 9.1
Figure 1.7 The dimensions of user intent: a combination of content understanding, user understanding, and domain understanding
The overlapping circles show why keyword matching, personalization, and domain interpretation each capture only part of intent. section 1.2.5
Choose a response that fits the goal
“Who is the CEO?” calls for a factual answer; “support” may call for navigation; “iphone screen blacked out” suggests troubleshooting. A broad “iphone” query may suit an overview, while a specific model and capacity may suit a product page. “Pay my bill” calls for a route to the action rather than another list of results. These are plausible interpretations, not guarantees about an individual user. section 2.5.5
Short queries often omit the context needed to distinguish meanings. A practical pipeline can look for phrases in the document corpus, classify a query against available categories, and use prior search-session signals to learn how users employ its terms. A semantic knowledge graph can classify a query by traversing from its terms to related document categories; that classification can inform filtering, ranking, or the user experience. section 2.5.4 section 6.1
Listing 6.1 Query classification using the SKG
def print_query_classification(query, classification_field="category",
classification_limit=5, keywords_field="body", min_occurrences=5):
nodes_to_traverse = [{"field": keywords_field, #1
"values": [query]}, #1
{"field": classification_field, #2
"min_occurrences": min_occurrences, #3
"limit": classification_limit}] #4
traversal = skg.traverse(*nodes_to_traverse) #5
print_classifications(query, traversal) #6
skg = get_skg(get_engine().get_collection("stackexchange"))
print_query_classification("docker", classification_limit=3)
print_query_classification("airplane", classification_limit=1)
print_query_classification("airplane AND crash", classification_limit=2)
print_query_classification("vitamins", classification_limit=2)
print_query_classification("alien", classification_limit=1)
print_query_classification("passport", classification_limit=1)
print_query_classification("driver", classification_limit=2)
print_query_classification("driver AND taxi", classification_limit=2)
print_query_classification("driver AND install", classification_limit=2)
The Python listing makes classification concrete: it traverses from a query to category nodes, with configurable occurrence and result limits. section 6.1
Treat inferred intent as a signal, not a command to ignore the query. Location and past interests can improve personalized results, but must not override an explicit request. Document-only interpretations can also mislead when users’ vocabulary differs from the indexed content; query logs and other user signals provide a useful counterweight. Test changes to relevance and keep learning from interactions rather than assuming an intent guess is correct. section 9.1.1 section 6.0 section 1.3





