Table of contents

Text Indexes

%3 cluster_f0daa053_2787_4eb3_98f0_2951ee7e6b8a Text Indexes cluster_4cbf7f7f_646c_4c7f_bf36_342238fbe3e0 Articles cluster_19e7a63f_bb29_439e_992b_b04181457de4 Libraries cluster_0534a39e_70bb_4f7e_9e3d_a0808fde7763 SaaS cluster_e0588a03_db06_413d_b25c_9b069c554529 File-based access cluster_79221950_f057_4c65_9277_bac356bf69d6 API-based access (search server) _fed16581_34ed_46e5_a7cc_cfaac6b2c910 Postgres Full Text Search vs the rest _ce14ae4e_eb30_4c72_9c4b_24997dabf935 Apache Lucene _4d0d984b_2dcb_476a_aaab_52eb7b8f7849 Algolia _65b53b3b_2af6_451e_a639_b303f842c474 SQLite FTS5 _c31f119e_c59c_421f_8b74_dda87a10a570 SQLite _65b53b3b_2af6_451e_a639_b303f842c474->_c31f119e_c59c_421f_8b74_dda87a10a570 _62e02df4_e737_4ff4_a761_a0b5f4402d7f Notes API _65b53b3b_2af6_451e_a639_b303f842c474->_62e02df4_e737_4ff4_a761_a0b5f4402d7f _e5f5d341_9148_4b6c_8b5a_9aff3a2912e4 Xapian _f440ad00_4bf2_464c_a21d_a6a7d369b694 MeiliSearch _6162cfeb_4352_412c_a401_a4748f8110db ElasticSearch _d0c9d9ad_1c2c_40c3_b756_7b0d64b63f96 Sonic _c6fd0c9c_3103_41fd_bd6b_c8cf2cfb1eb7 SphinxSearch _d3e9bdc9_31ad_4330_8c2b_0afbd2f33eae RediSearch _5cfd7859_fcf6_40f6_b3d2_f55e9393270c Redis _d3e9bdc9_31ad_4330_8c2b_0afbd2f33eae->_5cfd7859_fcf6_40f6_b3d2_f55e9393270c _f5cda495_f1bf_4ddb_9fd6_a6b3256506f3 Apache Solr _f5cda495_f1bf_4ddb_9fd6_a6b3256506f3->_ce14ae4e_eb30_4c72_9c4b_24997dabf935 _6d0ce466_fd19_4509_8c1f_adc4c1f7b1f9 Search function _6d0ce466_fd19_4509_8c1f_adc4c1f7b1f9->_e5f5d341_9148_4b6c_8b5a_9aff3a2912e4 _976b31a3_d4b8_4587_a083_85b3dea33604 NotMuch _976b31a3_d4b8_4587_a083_85b3dea33604->_e5f5d341_9148_4b6c_8b5a_9aff3a2912e4 _9f749a2d_475b_47b4_99c9_5df96496057d Databases _c31f119e_c59c_421f_8b74_dda87a10a570->_9f749a2d_475b_47b4_99c9_5df96496057d _5a26f2e4_176d_4a45_a87a_b14db3a8ef0b Fuzzy search on Javascript _5a26f2e4_176d_4a45_a87a_b14db3a8ef0b->__0:cluster_f0daa053_2787_4eb3_98f0_2951ee7e6b8a _a2643095_f570_492e_9313_4587fdd712da Notes Query _a2643095_f570_492e_9313_4587fdd712da->_65b53b3b_2af6_451e_a639_b303f842c474 _a2643095_f570_492e_9313_4587fdd712da->_e5f5d341_9148_4b6c_8b5a_9aff3a2912e4 _a2643095_f570_492e_9313_4587fdd712da->_6d0ce466_fd19_4509_8c1f_adc4c1f7b1f9 _36b3ba0d_8965_4faa_a25f_bc08455f4582 Python code _36b3ba0d_8965_4faa_a25f_bc08455f4582->_65b53b3b_2af6_451e_a639_b303f842c474 _36b3ba0d_8965_4faa_a25f_bc08455f4582->_a2643095_f570_492e_9313_4587fdd712da __1:cluster_f0daa053_2787_4eb3_98f0_2951ee7e6b8a->_9f749a2d_475b_47b4_99c9_5df96496057d __2:cluster_e0588a03_db06_413d_b25c_9b069c554529->_c31f119e_c59c_421f_8b74_dda87a10a570

This systems allow for an efficient text search engine. This normally includes additional features to optimize the user experience of such searches.

Libraries

If you wan't to build a new text-indexing service from scratch you might want to start here.

File-based access

These text indexes produce files or directories that are opened directly on the program or server that will perform the search, similar to how SQLite works.

If you don't want something too scalable, with more than one concurrent writer, these might be a good solution.

SQLite FTS5

floss

A text index module for the SQLite database.

Used on the Notes API to implement search. Just create a virtual fts5 table

CREATE VIRTUAL TABLE email USING fts5(sender, title, body);

fill it and perform searches

SELECT * FROM email WHERE email MATCH 'fts5' ORDER BY rank;

SOMETIME

Xapian

floss

Used by the Debian's apt-get. Might be tricky to get it working on environments where it's not pre-packaged for.

API-based access (search server)

If you wan't a plug-and-play solution, especially for scalable, cloud, or enterprise environment you might want to consider these.

SOMETIME

ElasticSearch

floss

Probably the most well-known search server.

SOMETIME

Apache Solr

floss

SaaS

Some companies that offer text search as a service.

SOMETIME

Algolia

saas

Used by HackerNews