Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

There are two huge things your 5 minute setup is missing which are very hard techinically to tackle

1. Incrementally updating the search space. Not that easy to do, and becomes more important to not just do the dumb thing of retraining the entire index on every update for larger datasets.

2. Combining vector search and some database-like search in an efficient manner. I don't know if this Google post really solves that problem or if they just do the vector lookup followed by a parallelized linear scan, but this is still an open research/unsolved problem.



Spot on! Both of those were motivating factors when building Weaviate (Open Source Vector Search Engine). We really wanted it to feel like a full database or search engine. You should be able to do anything you would do with Elasticsearch, etc. There should be no waiting time between creating an object and searching. Incremental Updates and Deletes supported, etc.

On your second point about efficient filtering, check out this article I wrote outlining how filtered vector search works in Weaviate: https://towardsdatascience.com/effects-of-filtered-hnsw-sear...

For even more details on filtering, check the documentation: https://www.semi.technology/developers/weaviate/current/arch...


Correct, that would take more than 5 minutes, although still possible to do with Faiss (and not that hard relatively speaking - in the Teclis demo, I indeed did your second point - combine results with a keyword search engine and there are many simple solutions you can use out there like Meilisearch, Sonic etc.e). If you were to try using an external API for vector search, you would still need to build keyword based search separately (and then combining/ranking logic) so then you may be better off just building the entire stack anyway.

Anyway, for me, the number one priority was latency and it is hard to beat on-premise search for that.

Even then, a vector search API is just one component you will need in your stack. You need to pick the right model, create vectors (GPU intensive), then possibly combine search results with keyword based search (say BM25) to improve accuracy etc. I am still waiting to see an end-to-end API doing all this.


>then possibly combine search results with keyword based search (say BM25) to >improve accuracy etc. I am still waiting to see an end-to-end API doing all this >

Vespa.ai supports combining dense vector search with keyword search and ranking, see https://docs.google.com/presentation/d/1vWKhSvFH-4MFcs4aNa9C...

There is also a Vespa sample application (open source, Apache 2) demonstrating multiple different retrieval and ranking strategies over at https://github.com/vespa-engine/sample-apps/blob/master/msma...


> I am still waiting to see an end to end API doing all this

That’s kinda the idea of Weaviate. You might like the Wikipedia demo dataset that contains all this. You indeed need to run this demo on your own infra but the whole setup (from vector DB to ML models) is containerized https://github.com/semi-technologies/semantic-search-through...


Interesting. Did you also tackle the incremental update problem with FAISS?


hnswlib[1] allows for incremental updates. And I believe in terms of accuracy it stacks up fairly well against alternatives like FAISS or ScaNN.

[1]: https://github.com/nmslib/hnswlib/


No, I didn't have a need for it in this demo (but is certainly possible with Faiss).


Thanks for sharing all that you have so far. I’d be super curious to learn more about how to best do incremental updates with FAISS!


Likewise here, had a look around on the Weaviate website too and couldn't find much on how they are internally handling incremental updates


Did you see this blog? https://db-engines.com/en/blog_post/87

It's an interesting point tho. Maybe it's good to add this to the docs as well


Exactly right. Things like data freshness (live index updates), CRUD operations, metadata filtering, and horizontal scaling are all “extras” that don’t come with Faiss. Hence the need for solutions like Google Matching Engine and Pinecone.io.

And even if you do just want ANN and nothing else, some people just want to make API calls to a live service and not worry about anything else.


Can you expand more or provide a concrete example for the second point? What kind of database-like searches are you thinking about for spatial data? Things like range-queries can already be (approximately) done. Or are you thinking about relational style queries on data associated with each point?


Yes exactly, relational style queries with each data point. Maybe you have some metadata about your images and maybe you need to join against another table to properly query them. But at the same time you want to only grab the first k nearest neighbors according to vector similarity.


Pinecone does this, at least if I’m understanding your use case right: https://www.pinecone.io/docs/metadata-filtering/

And you’re right, it wasn’t easy to build.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: