Show HN: Fist – Persistent Full Text Search and Indexing Server Written in C
github.com
github.com
This seems to be a simple word indexer instead, which is quite a different proposition to FTS.
I could definitely use some help on this. Whether it be giving advice or writing actual code.
If anyone would like to chat more about this I have setup a slack channel for be project. Here is the invite link
https://join.slack.com/t/fist-global/shared_invite/enQtNjcyN...
Thank you again for all the support, I’m excited to continue development.
Stemming: (removing prefix/suffixes walked, walking, walker -> walk) The snowball library contains many language stemmers https://snowballstem.org
Stopping: removing many common words like the/and that almost every document will surely match anyway. Again, per language.
Relevance ranking: Generally some variant of TF/IDF like BM25. The book "Managing Gigabytes" is an excellent intro to the subject and information retrieval in general: https://people.eng.unimelb.edu.au/ammoffat/mg/
A Document/Term/Value model, this is how Lucence, Xapian, and other IR systems model the store. It's worth sticking with that same pattern.
Good luck!
Not to be confused with Sphinx the documentation builder.
Disclosure: I work on a similar open source search engine (https://github.com/typesense/typesense)
Fist - (F)ull - (i)ndex (s)erver for (t)ext
https://en.wikipedia.org/wiki/Recursive_acronym
Also see backronym:
“Search (and) index full text”
Right now it is not very complicated. An inverted index of the text that is sent over is created and added to the database. The DB is just a big hash map. Searching right now is just an O(1) lookup in this hash map of the text being searched in this hash map.
I have plans to improve this of course. There is a lot of room for improvement. I am also planning on adding scoring using TF-IDF, but it's not done yet.
Any help with this would be more than appreciated!
https://github.com/groonga/groonga
But this looks like it intends to be a lot simpler.
see : https://thenewstack.io/which-programming-languages-use-the-l...
You'd think that something like a text search would benefit from being as fast as possible.
Aren't most of the other languages written in C because it is fast? (Except for Rust, of course, which now appears to be a very reasonable alternative ).
dsplit(), an even simpler function also calls dcreate() which allocates memory into the variable called 'new' that never gets freed. This is schoolbook example of a memory leak, showing the guy didn't choose C because he's already proficient in it. Or even worse, if he is proficient and the language still allows such serious mistakes to slip through so easily.
Edit: the code is actually completely full of memory leaks the more i read, stuff like else if(dequals(commands.values[0], dcreate(SEARCH))) where dcreate returns a buffer from malloc which would have to be freed.
* sorry stupid word-play
If you think this needs more testing, do it yourself. The author of this project does not owe you any testing. If the Makefile works for author, that's good enough for the author. If it isn't good enough for you, fix it. The license allows you to do that. Then consider being nice and giving that fix back to the community with a pull request.
Don't come here on your high horse and post vile comments on something that is being shared with you as a gift! If you come here with your pull requests, code, or even better--your own projects, you would be welcome!
Some tips:
* Rather than call their way atrocious, try something like "Use $(CC) instead of hard coding gcc to avoid a lot of headaches down the road."
* Instead of:
>> "This also raises in me the suspicion that it hasn't been tested with no compiler other than GCC at whatever version the developer had installed on his machine, which is bad."
Consider:
"Test on other machines to make sure you don't depend on quirks of your local gcc installation."
Don't tear down. Build up.