Full-Text Search Still Works. It Just Doesn’t Get You to an Answer #4958
githubmanticore
announced in
Blog
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Originally published on the Manticore Search website on August 20, 2026
Full-Text Search Still Works. It Just Doesn’t Get You to an Answer
Full-text search works well for precise queries. But when users describe a task, compare options, and expect an explanation, another layer is needed. We show how Conversational Search works in Manticore Search and how we measure retrieval quality.
Imagine a typical online shoe store.
A shopper opens search and types:
A few years ago, almost no one expected this from a search box. The query would have been shortened to something like:
Then the shopper would open several product cards, compare descriptions, materials, intended use, and price, and make the decision alone.
Today, people increasingly expect search itself to do part of that work. Not because full-text search has become worse. It still performs very well with exact names, SKUs, product codes, brands, and keywords. What has changed is what people expect to be able to ask a search system.
For example, Google reported in May 2026 that AI Mode had surpassed one billion monthly users. The company notes that people are asking longer, more complex questions that previously did not fit into conventional search. (blog.google)
The same thing happens in an online store.
A query such as:
only looks like one sentence. For a search system, it contains several tasks.
It needs to extract constraints such as color and waterproofing; understand that this is about running rather than walking; account for price, size, and availability; find suitable products; and, if the user asks “which are better,” explain the differences.
No single algorithm solves all of that.
Full-text search, vector search, filters, hybrid search, and a language model each solve different parts of the problem. It is far more effective to combine them than to choose between them.
That is exactly why Manticore has Conversational Search.
Word search, semantic search, and conversation are different tasks
Start with a simple query:
Here, the system barely needs to interpret the user’s intent. Full-text search handles it directly.
Or something even simpler:
Semantic methods are not needed here.
Now consider another example:
A product card may not contain the words “summer” or “long walks,” but it may include details such as “breathable material” or “lightweight construction.”
This is where vector search becomes useful.
Real queries often fall between these extremes:
Some parameters —
blackandGore-Tex— need to be preserved.Everyday runningdescribes the user’s intent rather than an exact attribute.For such cases, Manticore uses hybrid search, combining full-text and vector search through result ranking.
But even hybrid search returns only a list of results.
At that point, search considers its job done. The user usually does not.
It does not answer questions such as:
And it certainly does not handle a follow-up such as:
That is a conversation. It needs another layer.
What we built
To test this in practice, we used ConvApparel, a dataset of conversations about choosing apparel. After cleanup, it contained 82,524 products: footwear, pants, tops, and outerwear. Each product has a description, category, images, and attributes. We built Manticore Apparel Shop on this data.
For example, you can type:
The system first finds suitable products, then a language model generates an answer using them as context, while the interface shows the products themselves.
It is important to keep the connection between the answer and the data. If the system claims that a model is suitable for rain, the user should be able to open the product and verify the source of that claim.
In this approach, the language model does not replace search. It interprets its results.
How it works
Two main commands are used:
and
First, you create a Conversational Search model and set the rules it follows.
CREATE CHAT MODEL assistant ( model='openrouter:google/gemma-4-26b-a4b-it', timeout=60, retrieval_limit=5, max_document_length=3000, custom_prompt='You are a context-only shopping assistant. Answer using only the provided context. Do not use outside knowledge or unsupported assumptions. Recommend only products supported by the retrieved context. For every recommended product, briefly explain why it matches the request. End every recommendation with the corresponding context source ID in the format [ref:]. If none of the retrieved products support the request, say that you do not have enough information.' );retrieval_limitdetermines how many documents enter the context.max_document_lengthlimits the amount of text from each document.If there is too little context, the model will not see the right products. If there is too much, latency and query cost increase. Like a person, a language model does not become smarter just because it has been given everything to read.
You can then run a query:
CALL CHAT( 'I need black waterproof running shoes for jogging', 'convapparel_products', 'assistant', 'demo-session-001', 'embedding_vector' );You can then continue the conversation:
CALL CHAT( 'Which of these are better for daily use?', 'convapparel_products', 'assistant', 'demo-session-001', 'embedding_vector' );The system uses conversation history, so the user does not need to repeat the context.
Through the HTTP API
Conversational Search is also available through the JSON API:
{ "chat": { "query": "I need black waterproof running shoes for jogging", "table": "convapparel_products", "model_name": "assistant", "conversation_uuid": "demo-session-001", "vector_field": "embedding_vector" } }The request is sent to
/search.What the system returns
The response contains:
conversation_uuiduser_querysearch_query— the search query generated by the systemresponsesourcessearch_queryis particularly important.If the user writes:
On its own, this query makes no sense without context. The system therefore forms a complete search query using the conversation history.
This also simplifies debugging: you can trace the entire chain from query to answer.
How retrieval works
Conversational Search uses vector search over an embedding field. The flow looks like this:
Where search ends and conversation begins
Full-text search works well for exact queries. Vector search works with semantic ones. Hybrid search works with their combination. Conversational Search is needed when the result must be explained, compared, or refined.
Quality
We tested this on our conversational search quality benchmark, using 200 deterministic shopping queries from ConvApparel. The benchmark evaluates the product IDs returned as sources, rather than the wording of the generated answer.
In the current run, Manticore scored 0.3650 Hit@3, 0.4250 Hit@5, 0.5250 Hit@10, and 0.2790 MRR — the best result on each of those metrics among the engines tested. The full repository includes the dataset-building rules, engine configuration, smoke tasks, and raw results.
Conclusion
Search in modern systems is not one algorithm but several layers:
Each solves its own task. A language model does not replace search; it works on top of it.
Without good search, you do not get a smart assistant; you get a very talkative consultant that barely knows its own catalog.
If you want to run it locally or explore the code, check the GitHub repository.
All reactions