Embeddings and Semantic Search in Travel
\\\"Hotels like the one I loved in Barcelona\\\" is a semantic query. Vector embeddings make it searchable — no keywords required.

"Find me a hotel like the one I loved in Barcelona." Try typing that into any traditional travel search engine. You will get a keyword match on "Barcelona" and a list of hotels in Barcelona, which is exactly not what was asked. The user wants the feeling, the vibe, the characteristics of that Barcelona hotel, but in a different city.
This is a semantic query. It requires understanding what the user means, not just what they typed. And it is one of the most common types of requests we see in our AI travel agent. People describe preferences in terms of past experiences, emotional associations, and subjective qualities. Vector embeddings make these searchable.
Beyond keyword search

Traditional travel search is keyword-based. You type a destination, dates, and maybe a price range. The system matches those keywords against inventory and returns results. This works for structured queries. It fails completely for preference-based queries.
Consider: "A quiet hotel with local character, walkable to restaurants, the kind of place where the staff remembers your name." No combination of keyword filters captures this. You could check "boutique hotel" as a filter, but that is a rough proxy at best.
Semantic search works differently. It converts both the query and the searchable items into dense vector representations in the same embedding space. Items that are semantically similar end up near each other in this space, regardless of whether they share keywords. A "cozy family-run guesthouse with home-cooked breakfast" and a "intimate boutique hotel with personalized service" end up close together because they mean similar things, even though they share almost no words.
How embeddings work
An embedding model takes a piece of text and produces a fixed-length vector of numbers, typically 768 or 1536 dimensions. These numbers encode the semantic meaning of the text in a way that preserves similarity relationships.
For travel, we generate embeddings for hotel descriptions, traveler preference statements, past experience summaries, and destination characteristics. The same embedding model encodes all of these into the same vector space, which means we can measure the distance between a user's preference and a hotel's description directly.
When a user says "hotels like the one I loved in Barcelona," we retrieve the embedding of their Barcelona stay (which encodes the description, their notes, and the characteristics of that property) and search for the nearest neighbors in the embedding space among hotels in their target destination. The result is not an exact match; it is a similarity score. "This hotel in Lisbon has a 0.91 similarity to your Barcelona experience. It is a restored 19th-century building, 12 rooms, rooftop terrace, in a residential neighborhood with local restaurants within walking distance." The agent presents this with an explanation of why it matched, grounding the recommendation in specific shared characteristics.
Preference embeddings

Beyond searching for hotels, embeddings let us represent what a traveler likes as a point in vector space. This is a powerful concept.
Over multiple trips and conversations, we build a composite preference embedding for each user. It is not a list of keywords like "boutique, quiet, walkable." It is a dense vector that captures the full nuance of their preferences, including implicit ones they have never explicitly stated.
For example, a user who consistently books hotels in residential neighborhoods (not tourist districts), chooses restaurants that are not in guidebooks, and prefers morning flights might never articulate "I value authenticity and efficiency." But their preference embedding, built from the embeddings of their actual choices, captures exactly this.
When we search for hotels for this user, we are not matching keywords. We are finding properties whose characteristic embeddings are nearest to this user's preference embedding. The result feels like the agent "gets" them, because it does, at a mathematical level.
Similarity matching across categories
Embeddings are not limited to hotel matching. The same approach works for:
Destination discovery. "Where should I go for my anniversary?" The agent retrieves the embeddings of the user's past anniversary trips, memorable date nights, and stated romantic preferences, and searches for destinations whose embeddings are similar.
Experience matching. "Find me something like the cooking class we did in Tuscany." The embedding of that Tuscany experience (small group, local chef, market visit, hands-on, Italian countryside) matches similar experiences in other destinations.
Restaurant recommendations. "Places like that izakaya in Tokyo." The embedding captures the specific qualities: intimate, counter seating, omakase-style, local neighborhood, reasonably priced.
Each of these is a semantic query that keyword search cannot handle. Embeddings make them as searchable as "flights to NYC."
Clustering travelers
When you embed thousands of travelers' preference profiles, interesting clusters emerge. We can identify distinct preference groups without defining them in advance.
There is a cluster of travelers who prioritize efficiency: direct flights, business hotels near meeting locations, fast check-in. There is a cluster that prioritizes discovery: off-the-beaten-path destinations, local homestays, food markets. There is a cluster that prioritizes comfort: premium airlines, luxury resorts, spa access. These clusters inform recommendations for new users who do not yet have extensive history. If a new user's early interactions place them near the "discovery" cluster, we can start making recommendations informed by the preferences of similar travelers before they have booked their first trip.
This is collaborative filtering through embeddings, and it works better than traditional collaborative filtering because it operates on semantic similarity rather than item overlap. Two users who have never visited the same destination can still be identified as having similar preferences because their preference embeddings are close in vector space.
Embeddings in agentic memory
The agentic memory system that powers our AI travel agent is built on embeddings. When the agent needs to retrieve relevant context about a user, it is not doing keyword lookups. It is performing nearest-neighbor searches in embedding space.
"The user mentioned they had a bad experience at an airport." The memory system finds the relevant memory because the embedding of the current context is close to the embedding of the stored memory about the airport experience, even if the original memory used different words entirely.
This is what makes the agent feel like it remembers. It does not pattern-match on keywords. It retrieves semantically relevant memories, which is how human memory works too.
Embedding-based recommendations improve with more interaction data. Each booking, each preference statement, each piece of feedback refines the user's preference embedding. After ten trips, the preference model is significantly more accurate than after one. This compounding effect is one reason why AI travel booking gets better the more you use it, and why switching to a competitor that does not have your preference history feels like starting over.
Nowah is an AI travel agent that searches and books real flights and hotels through conversation — no filters, no thirty open tabs. Plan your next trip.