TypeSense instead of Algolia?

For anyone currently using Algolia. I’m thinking about going down this path and implement a better search for my Bubble app and came across TypeSense. It seems like it may be a good alternative to Algolia in a few ways – price being a big one.

I’m not sure how to implement it yet, but there is an NPM package, so I think a plugin could be built.

Anyways I’m looking for feedback and ideas from others.

High-level reasons:

The goal is to be much better than Algolia and Typesense’s design is in some ways already so:

  1. Sorting order is dynamic, unlike Algolia where you are forced to define a sort order during index creation and you are forced to duplicate your entire index when you want another sort order, e.g. sort by timestamp vs sort by ratings.

  2. Run fast on commodity hardware (e.g. a decent EC2 instance) instead of requiring special dedicated hardware that costs a bomb. This is achieved by using highly optimized in-memory data structures instead of relying on fast SSDs and memory mapped I/O approach that Algolia has taken.

  3. Disprove the notion that one cannot host their search themselves and need to rely on a cloud service provider. We want to make it really easy to run Typesense and manage it. We have some things to do on this front, but this is definitely the goal.

Here’s some links for reading.

2 Likes

Where are you planning to serve it from?

Just to add to what @JonL mentioned, TypeSense is a self-hosting service. So you will need to install and host your own server for the database (index).
Whatever hosting you use must be very fast, reliable and always available.
Algolia takes care of all this hosting for you.
So maybe you could save some money hosting TypeSense yourself but not sure if the savings might be worth all thr trouble.

But it’s really nice to have that option and will be good to see if someone can provide some price comparisons.

@jonl, the majority of data types on my app to make repeating groups load faster and have the ability to perform better searches.

@seanhoots, I have no issues setting up a DO server or EC2. The cost would be MUCH less than Algolia in the long run.

No, I meant what @seanhoots said. Just with less words :stuck_out_tongue:

@Kfawcett it will be great if you could do some cost breakdown here.
If it’s cost effective and performance is anywhere near Algolia many people will be interested.
And maybe some of us could look into a plugin.

A 4GB 2vCPU box at Digital Ocean is only $20 per month and you could easily scale up, or down, depending on resources being used.

Here’s an excerpt from Typesense’s GitHub.

Speed is great, but what about the memory footprint?

A fresh Typesense server will take less than 5 MB of memory. As you start indexing documents, the memory use will increase correspondingly. How much it increases depends on the number and type of fields you index.

We’ve strived to keep the in-memory data structures lean. To give you a rough idea: when 1 million Hacker News titles are indexed along with their points, Typesense consumes 165 MB of memory. The same size of that data on disk in JSON format is 88 MB. We hope to add better benchmarks on a variety of different data sets soon. In the mean time, if you have any numbers from your own datasets, please send us a PR!

4 Likes

Not bad as a starter pack pricing.

Two things.

  1. Wouldn’t it be better to host in AWS. Doesn’t AWS have smart shortcuts(routing) when two applications in AWS talk to each other?

  2. “Search Box improvement” and “Ability to sort / filter on sub-fields of things” in Bubble’s roadmap.

I’ve seen the following enhancement in their roadmap for months. I read somewhere that it was not about just about the input itself but also about search features and performance. They were rethinking the whole search approach.

One thing I hate about Bubble is how they expose their roadmap. Nice to see it there, but it’s not very useful for us to be honest.

Would you start working on your idea knowing that out of the blue Bubble could implement a better search module? Or should you start working on your idea because you actually have no clue what “Search Box improvement” means.

@neerja Generally speaking it would be great to have more details on the items placed in the roadmap. With also some tentative dates. I know it sounds daunting but would be great for us to know if we could potentially expect something in Q4 of 2019 or 2nd half of 2020.

Specifically for this thread it would be great to know if the team is working on providing a better searching experience overall and what would it consist of.

I would love if Bubble improved their speed and if it worked better than Algolia/Typesense I would happily switch back. I’m just unsure if, or when, that will happen.

With the slow loads experienced in Repeating Groups – and with the improvements others have seen by switching to Algolia – I’m looking for ways to reduce load times and improve user experience.

Took a quick look at TypeSense and it seems it may be cost effective than Algolia (or ElasticSearch).
Since their server hardware requirement is very generous you could easily setup a master-slave server for high availability (highly recommended for a search engine like this).
So maybe with a $50/month budget on Digital Occean you could stand some setup to get this to work.
Looks like integration with bubble shouldn’t be hard too.
Will give it short.

2 Likes

@seanhoots @Kfawcett This is Kishore, creator of Typesense. I will be happy to help in anyway I can, let me know.

4 Likes

Hey @kishorenc, thanks for posting! You must have some nice web monitoring tools. :wink:

Hi @kishorenc, it’s nice to see you here.

I actually have some good and not so good news about my experience with TypeSense and was preparing to share my experience here.

So first off I was able to setup the server (using the Docker image on Digital Occean - 2 GB RAM / 2CPU /60 GB Disk).
I also created a simple bubble plugin that integrates TypeSense and connects to my server.
My test collection was a movie database with 28 fields. I used a shell script to index about 5,300 documents (rows) into my collection . I didn’t find a way to bulk add documents in one call. So I basically had to make 5,300 calls from a jsonl file uploaded to my server.

But after running about 5 queries (which worked) my TypeSense docker container crashed and i’ve not been able to recover it (EDIT: I was able to get it back to work but crashed again).

In terms of speed its hard to judge for now as I couldn’t get the chance to compare it with a native bubble implementation or an algolia version.
I was displaying the result in a repeating group and it took about a second or two any time i changed the query string to see the results.

@kishorenc here are some few questions I have:

  1. How can I bulk add documents to a collection in one call instead of iterating through a file and making calls one by one
  2. Are there immediate plans to have some UI console as front end to the TypeSense server like the way Algolia works without having to deal with shell commands.
  3. What is the recommended server hardware requirement for a typical application with about 3 collections, each having about hundreds of thousand documents and about 10 indexed fields?
  4. What’s the best way to stop and restart the TypeSense server? And is using curl http://hostaddress:8108/health the right and only way to check the status of the server?

Edit
For bubble users who might not be familiar with TypeSense terminology.
Collection is a table/type with fields, e.g. User (firstname, lastname, age), Movie (title,director, year).
Document is a Thing or row in the table.

6 Likes

Ok so I had to take down my previous post with the link to the demo page.
The server has crashed again.
This is about the third time i’ve had the server crashed in just 2 days of my testing.
I’m not sure if its from the TypesSense Server, the docker container or what.

@kishorenc I’m dumping the error here for you:

2019/05/24 16:11:39 604547      ERROR [collection.cpp->search:567]      Could not locate the JSON document for sequence ID: 3_$SI_man_
2019/05/24 16:11:39 606097

***** FATAL SIGNAL RECEIVED *******
Received fatal signal: SIGSEGV(11)      PID: 1

***** SIGNAL SIGSEGV(11)

******* STACKDUMP *******
        stack dump [1]  /opt/typesense-server() [0x6b0f68]
        stack dump [2]  /lib/x86_64-linux-gnu/libpthread.so.0+0x113e0 [0x7f7071f983e0]

        stack dump [3]  /opt/typesense-server : Collection::highlight_result(field const&, std::vector<std::vector<art_leaf*, std::allocator<art_leaf*> >, std::allocator<std::vector<art_leaf*, std::allocator<art_leaf*> > > > const&, Topster<512ul>::KV const&, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer> const&, StringUtils&, Collection::highlight_t&)+0x13d [0x5683ed]

        stack dump [4]  /opt/typesense-server : Collection::search(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::vector<sort_by, std::allocator<sort_by> > const&, int, unsigned long, unsigned long, token_ordering, bool, unsigned long, spp::sparse_hash_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, spp::spp_hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, spp::libc_allocator_with_realloc<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, spp::sparse_hash_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, spp::spp_hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, spp::libc_allocator_with_realloc<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)+0x43e4 [0x571194]

        stack dump [5]  /opt/typesense-server : get_search(http_req&, http_res&)+0x110b [0x59c08b]

        stack dump [6]  /opt/typesense-server : HttpServer::catch_all_handler(st_h2o_handler_t*, st_h2o_req_t*)+0x8a3 [0x5a8193]
        stack dump [7]  /opt/typesense-server() [0x60f2cd]
        stack dump [8]  /opt/typesense-server() [0x616cc0]
        stack dump [9]  /opt/typesense-server() [0x604251]
        stack dump [10]  /opt/typesense-server() [0x604378]
        stack dump [11]  /opt/typesense-serverh2o_evloop_run+0x2d [0x60600d]

        stack dump [12]  /opt/typesense-server : HttpServer::run()+0x211 [0x5a8d51]

        stack dump [13]  /opt/typesense-server : run_server(cmdline::parser&, void (*)(), void (*)())+0x9a3 [0x5f0e63]
        stack dump [14]  /opt/typesense-servermain+0x11b [0x5fd6fb]
        stack dump [15]  /lib/x86_64-linux-gnu/libc.so.6__libc_start_main+0xf0 [0x7f70714c9830]
        stack dump [16]  /opt/typesense-server() [0x556dfd]

Exiting after fatal event  (FATAL_SIGNAL). Fatal type:  SIGSEGV
Log content flushed sucessfully to sink


2019/05/24 16:11:39 606097

***** FATAL SIGNAL RECEIVED *******
Received fatal signal: SIGSEGV(11)      PID: 1

***** SIGNAL SIGSEGV(11)

******* STACKDUMP *******
        stack dump [1]  /opt/typesense-server() [0x6b0f68]
        stack dump [2]  /lib/x86_64-linux-gnu/libpthread.so.0+0x113e0 [0x7f7071f983e0]

        stack dump [3]  /opt/typesense-server : Collection::highlight_result(field const&, std::vector<std::vector<art_leaf*, std::allocator<art_leaf*> >, std::allocator<std::vector<art_leaf*, std::allocator<art_leaf*> > > > const&, Topster<512ul>::KV const&, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer> const&, StringUtils&, Collection::highlight_t&)+0x13d [0x5683ed]

        stack dump [4]  /opt/typesense-server : Collection::search(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::vector<sort_by, std::allocator<sort_by> > const&, int, unsigned long, unsigned long, token_ordering, bool, unsigned long, spp::sparse_hash_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, spp::spp_hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, spp::libc_allocator_with_realloc<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, spp::sparse_hash_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, spp::spp_hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, spp::libc_allocator_with_realloc<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)+0x43e4 [0x571194]

        stack dump [5]  /opt/typesense-server : get_search(http_req&, http_res&)+0x110b [0x59c08b]

        stack dump [6]  /opt/typesense-server : HttpServer::catch_all_handler(st_h2o_handler_t*, st_h2o_req_t*)+0x8a3 [0x5a8193]
        stack dump [7]  /opt/typesense-server() [0x60f2cd]
        stack dump [8]  /opt/typesense-server() [0x616cc0]
        stack dump [9]  /opt/typesense-server() [0x604251]
        stack dump [10]  /opt/typesense-server() [0x604378]
        stack dump [11]  /opt/typesense-serverh2o_evloop_run+0x2d [0x60600d]

        stack dump [12]  /opt/typesense-server : HttpServer::run()+0x211 [0x5a8d51]

        stack dump [13]  /opt/typesense-server : run_server(cmdline::parser&, void (*)(), void (*)())+0x9a3 [0x5f0e63]
        stack dump [14]  /opt/typesense-servermain+0x11b [0x5fd6fb]
        stack dump [15]  /lib/x86_64-linux-gnu/libc.so.6__libc_start_main+0xf0 [0x7f70714c9830]
        stack dump [16]  /opt/typesense-server() [0x556dfd]

Exiting after fatal event  (FATAL_SIGNAL). Fatal type:  SIGSEGV
Log content flushed sucessfully to sink

exitWithDefaultSignalHandler:238. Exiting due to FATAL_SIGNAL, 11

@seanhoots Will it be possible for you to share the dataset with me? And perhaps the query that crashes the server? You can create an issue here: https://github.com/typesense/typesense/issues – I can then take a look to see what’s happening. Based on the stacktrace you have posted though, it seems like it was able to find the document in-memory but not on the disk. I’ve never seen anything like that, but I have not tested extensively on Docker, so it might be a Docker data layering issue.

My answers to your other questions:

  1. How can I bulk add documents to a collection in one call instead of iterating through a file and making calls one by one

Most of the work for this is already done. Will be adding bulk API in the next release.

  1. Are there immediate plans to have some UI console as front end to the TypeSense server like the way Algolia works without having to deal with shell commands.

That would be useful, will think about it, but it probably has to be a separate app since we don’t want to mix the concerns.

  1. What is the recommended server hardware requirement for a typical application with about 3 collections, each having about hundreds of thousand documents and about 10 indexed fields?

Depends on the type of fields indexed and size of the data. Memory requirements will vary based on the underlying indexing data structure used for specific fields.

  1. What’s the best way to stop and restart the TypeSense server? And is using curl http://hostaddress:8108/health the right and only way to check the status of the server?

Docker stop and start should work, what problem are you facing?

Hi @kishorenc, here is a google drive link to my dataset.
It’s in jsonl format so you can easily index it with your script on your documentation page.
Also below my collection schema

{
        "name": "movies",
        "fields": [
          {"name": "color", "type": "string" },
          {"name": "director_name", "type": "string" },
          {"name": "num_critic_for_reviews", "type": "int32" },
          {"name": "duration", "type": "int32" },
          {"name": "director_facebook_likes", "type": "int32" },
          {"name": "actor_3_facebook_likes", "type": "int32" },
          {"name": "actor_2_name", "type": "string" },
          {"name": "actor_1_facebook_likes", "type": "int32" },
          {"name": "gross", "type": "int32" },
          {"name": "genres", "type": "string" },
          {"name": "actor_1_name", "type": "string" },
          {"name": "movie_title", "type": "string" },
          {"name": "num_voted_users", "type": "int32" },
          {"name": "cast_total_facebook_likes", "type": "int32" },
          {"name": "actor_3_name", "type": "string" },
          {"name": "facenumber_in_poster", "type": "int32" },
          {"name": "plot_keywords", "type": "string" },
          {"name": "movie_imdb_link", "type": "string" },
          {"name": "num_user_for_reviews", "type": "int32" },
          {"name": "language", "type": "string" },
          {"name": "country", "type": "string" },
          {"name": "content_rating", "type": "string" },
          {"name": "budget", "type": "int32" },
          {"name": "title_year", "type": "int32" },
          {"name": "actor_2_facebook_likes", "type": "int32" },
          {"name": "imdb_score", "type": "float" },
          {"name": "aspect_ratio", "type": "float" },
          {"name": "movie_facebook_likes", "type": "int32" }
        ],
        "default_sorting_field": "imdb_score"
      }

With regards to the query that is crashing the server it’s hard to tell. Its not any specific query. I only search for movies by title and after some few tests the server just crashes.

I’ve restarted the docker server again and the Typesense server so you can use try my demo page below. If the page stops working it means the server has crashed.

Impressive @seanhoots! I bet some of the delay is due to the trip from Bubble to DO and back to Bubble. If we had it on the same server/system it may be faster.

How fast does it show the records when storing the data in Bubble?

Haven’t tested storing the data in bubble. Its a huge dataset and will have to use bulk upload on a paid bubble plan to get it into bubble.

If you want to give it a go here is a csv of the dataset.

@kishorenc, with regards to highlighting the hit characters, is there a way to customize the tags instead of the default <mark> tag?
Algolia has this nice feature where it allows you to define the highlight pre and post tags.
See below:

@kishorenc, I’ve got a new errro trace for you. This one is different.

Ready to accept requests on port 8108
2019/05/24 17:34:29 176283      ERROR [collection.cpp->search:567]      Could not locate the JSON document for sequence ID: 3_$SI_
2019/05/24 17:34:29 176305      ERROR [collection.cpp->search:567]      Could not locate the JSON document for sequence ID: 3_$SI_y`
*** Error in `/opt/typesense-server': free(): invalid pointer: 0x0000000003f37980 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7f8386ee97e5]
/lib/x86_64-linux-gnu/libc.so.6(+0x7fe0a)[0x7f8386ef1e0a]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7f8386ef598c]
/opt/typesense-server(_ZN10Collection6searchENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS5_SaIS5_EERKS5_RKS8_RKS6_I7sort_bySaISD_EEimm14token_orderingbmN3spp15sparse_hash_setIS5_NSJ_8spp_hashIS5_EESt8equal_toIS5_ENSJ_27libc_allocator_with_reallocIS5_EEEESR_+0x27f2)[0x56f5a2]
/opt/typesense-server(_Z10get_searchR8http_reqR8http_res+0x110b)[0x59c08b]
/opt/typesense-server(_ZN10HttpServer17catch_all_handlerEP16st_h2o_handler_tP12st_h2o_req_t+0x8a3)[0x5a8193]
/opt/typesense-server[0x60f2cd]
/opt/typesense-server[0x616cc0]
/opt/typesense-server[0x604251]
/opt/typesense-server[0x604378]
/opt/typesense-server(h2o_evloop_run+0x2d)[0x60600d]
/opt/typesense-server(_ZN10HttpServer3runEv+0x211)[0x5a8d51]
/opt/typesense-server(_Z10run_serverRN7cmdline6parserEPFvvES3_+0x9a3)[0x5f0e63]
/opt/typesense-server(main+0x11b)[0x5fd6fb]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f8386e92830]
/opt/typesense-server[0x556dfd]
======= Memory map: ========
00400000-00dc1000 r-xp 00000000 fc:01 1040565                            /opt/typesense-server
00fc0000-00fe1000 rw-p 009c0000 fc:01 1040565                            /opt/typesense-server
00fe1000-00ff6000 rw-p 00000000 00:00 0
020a2000-03f6c000 rw-p 00000000 00:00 0                                  [heap]
7f8330000000-7f8330021000 rw-p 00000000 00:00 0
7f8330021000-7f8334000000 ---p 00000000 00:00 0
7f8338000000-7f8338021000 rw-p 00000000 00:00 0
7f8338021000-7f833c000000 ---p 00000000 00:00 0
7f833c000000-7f833c021000 rw-p 00000000 00:00 0
7f833c021000-7f8340000000 ---p 00000000 00:00 0
7f8340000000-7f8340021000 rw-p 00000000 00:00 0
7f8340021000-7f8344000000 ---p 00000000 00:00 0
7f8344000000-7f8344021000 rw-p 00000000 00:00 0
7f8344021000-7f8348000000 ---p 00000000 00:00 0
7f8348000000-7f8348021000 rw-p 00000000 00:00 0
7f8348021000-7f834c000000 ---p 00000000 00:00 0
7f834c000000-7f834c021000 rw-p 00000000 00:00 0
7f834c021000-7f8350000000 ---p 00000000 00:00 0
7f8350000000-7f8350021000 rw-p 00000000 00:00 0
7f8350021000-7f8354000000 ---p 00000000 00:00 0
7f8354000000-7f8354021000 rw-p 00000000 00:00 0
7f8354021000-7f8358000000 ---p 00000000 00:00 0
7f8358000000-7f8358021000 rw-p 00000000 00:00 0
7f8358021000-7f835c000000 ---p 00000000 00:00 0
7f835c000000-7f835c021000 rw-p 00000000 00:00 0
7f835c021000-7f8360000000 ---p 00000000 00:00 0
7f8360000000-7f8360021000 rw-p 00000000 00:00 0
7f8360021000-7f8364000000 ---p 00000000 00:00 0
7f8364000000-7f8364021000 rw-p 00000000 00:00 0
7f8364021000-7f8368000000 ---p 00000000 00:00 0
7f8368000000-7f8368021000 rw-p 00000000 00:00 0
7f8368021000-7f836c000000 ---p 00000000 00:00 0
7f836f7df000-7f836f7e0000 ---p 00000000 00:00 0
7f836f7e0000-7f836ffe0000 rw-p 00000000 00:00 0
7f836ffe0000-7f836ffe1000 ---p 00000000 00:00 0
7f836ffe1000-7f83707e1000 rw-p 00000000 00:00 0
7f83707e1000-7f83707e2000 ---p 00000000 00:00 0
7f83707e2000-7f8370fe2000 rw-p 00000000 00:00 0
7f8370fe2000-7f8370fe3000 ---p 00000000 00:00 0
7f8370fe3000-7f83717e3000 rw-p 00000000 00:00 0
7f83757eb000-7f83757ec000 ---p 00000000 00:00 0
7f83757ec000-7f8375fec000 rw-p 00000000 00:00 0
7f8375fec000-7f8375fed000 ---p 00000000 00:00 0
7f8375fed000-7f83767ed000 rw-p 00000000 00:00 0
7f83767ed000-7f83767ee000 ---p 00000000 00:00 0
7f83767ee000-7f8376fee000 rw-p 00000000 00:00 0
7f8376fee000-7f8376fef000 ---p 00000000 00:00 0
7f8376fef000-7f83777ef000 rw-p 00000000 00:00 0
7f83777ef000-7f83777f0000 ---p 00000000 00:00 0
7f83777f0000-7f8377ff0000 rw-p 00000000 00:00 0
7f8377ff0000-7f8377ff1000 ---p 00000000 00:00 0
7f8377ff1000-7f83787f1000 rw-p 00000000 00:00 0
7f83787f1000-7f83787f2000 ---p 00000000 00:00 0
7f83787f2000-7f8378ff2000 rw-p 00000000 00:00 0
7f8378ff2000-7f8378ff3000 ---p 00000000 00:00 0
7f8378ff3000-7f83797f3000 rw-p 00000000 00:00 0
7f83797f3000-7f83797f4000 ---p 00000000 00:00 0
7f83797f4000-7f8379ff4000 rw-p 00000000 00:00 0
7f8379ff4000-7f8379ff5000 ---p 00000000 00:00 0
7f8379ff5000-7f837a7f5000 rw-p 00000000 00:00 0
7f837a7f5000-7f837a7f6000 ---p 00000000 00:00 0
7f837a7f6000-7f837aff6000 rw-p 00000000 00:00 0
7f837aff6000-7f837aff7000 ---p 00000000 00:00 0
7f837aff7000-7f837b7f7000 rw-p 00000000 00:00 0
7f837b7f7000-7f837b7f8000 ---p 00000000 00:00 0
7f837b7f8000-7f837bff8000 rw-p 00000000 00:00 0
7f837bff8000-7f837bff9000 ---p 00000000 00:00 0
7f837bff9000-7f837c7f9000 rw-p 00000000 00:00 0
7f837c7f9000-7f837c7fa000 ---p 00000000 00:00 0
7f837c7fa000-7f837cffa000 rw-p 00000000 00:00 0
7f837cffa000-7f837cffb000 ---p 00000000 00:00 0
7f837cffb000-7f837d7fb000 rw-p 00000000 00:00 0
7f837d7fb000-7f837d7fc000 ---p 00000000 00:00 0
7f837d7fc000-7f837dffc000 rw-p 00000000 00:00 0
7f837dffc000-7f837dffd000 ---p 00000000 00:00 0
7f837dffd000-7f837e7fd000 rw-p 00000000 00:00 0
7f837e7fd000-7f837e7fe000 ---p 00000000 00:00 0
7f837e7fe000-7f837effe000 rw-p 00000000 00:00 0
7f837effe000-7f837efff000 ---p 00000000 00:00 0
7f837efff000-7f837f7ff000 rw-p 00000000 00:00 0
7f837f7ff000-7f837f800000 ---p 00000000 00:00 0
7f837f800000-7f8380000000 rw-p 00000000 00:00 0
7f8380000000-7f8380021000 rw-p 00000000 00:00 0
7f8380021000-7f8384000000 ---p 00000000 00:00 0
7f8384457000-7f838446d000 r-xp 00000000 fc:01 1033195                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f838446d000-7f838466c000 ---p 00016000 fc:01 1033195                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f838466c000-7f838466d000 rw-p 00015000 fc:01 1033195                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f838466d000-7f838466e000 ---p 00000000 00:00 0
7f838466e000-7f8384e6e000 rw-p 00000000 00:00 0
7f8384e6e000-7f8384e6f000 ---p 00000000 00:00 0
7f8384e6f000-7f838566f000 rw-p 00000000 00:00 0
7f838566f000-7f8385670000 ---p 00000000 00:00 0
7f8385670000-7f8385e70000 rw-p 00000000 00:00 0
7f8385e70000-7f8385e71000 ---p 00000000 00:00 0
7f8385e71000-7f8386671000 rw-p 00000000 00:00 0
7f8386671000-7f8386672000 ---p 00000000 00:00 0
7f8386672000-7f8386e72000 rw-p 00000000 00:00 0
7f8386e72000-7f8387031000 r-xp 00000000 fc:01 1033174                    /lib/x86_64-linux-gnu/libc-2.23.so
7f8387031000-7f8387231000 ---p 001bf000 fc:01 1033174                    /lib/x86_64-linux-gnu/libc-2.23.so
7f8387231000-7f8387235000 r--p 001bf000 fc:01 1033174                    /lib/x86_64-linux-gnu/libc-2.23.so
7f8387235000-7f8387237000 rw-p 001c3000 fc:01 1033174                    /lib/x86_64-linux-gnu/libc-2.23.so
7f8387237000-7f838723b000 rw-p 00000000 00:00 0
7f838723b000-7f8387343000 r-xp 00000000 fc:01 1033206                    /lib/x86_64-linux-gnu/libm-2.23.so
7f8387343000-7f8387542000 ---p 00108000 fc:01 1033206                    /lib/x86_64-linux-gnu/libm-2.23.so
7f8387542000-7f8387543000 r--p 00107000 fc:01 1033206                    /lib/x86_64-linux-gnu/libm-2.23.so
7f8387543000-7f8387544000 rw-p 00108000 fc:01 1033206                    /lib/x86_64-linux-gnu/libm-2.23.so
7f8387544000-7f8387547000 r-xp 00000000 fc:01 1033187                    /lib/x86_64-linux-gnu/libdl-2.23.so
7f8387547000-7f8387746000 ---p 00003000 fc:01 1033187                    /lib/x86_64-linux-gnu/libdl-2.23.so
7f8387746000-7f8387747000 r--p 00002000 fc:01 1033187                    /lib/x86_64-linux-gnu/libdl-2.23.so
7f8387747000-7f8387748000 rw-p 00003000 fc:01 1033187                    /lib/x86_64-linux-gnu/libdl-2.23.so
7f8387748000-7f838774f000 r-xp 00000000 fc:01 1033248                    /lib/x86_64-linux-gnu/librt-2.23.so
7f838774f000-7f838794e000 ---p 00007000 fc:01 1033248                    /lib/x86_64-linux-gnu/librt-2.23.so
7f838794e000-7f838794f000 r--p 00006000 fc:01 1033248                    /lib/x86_64-linux-gnu/librt-2.23.so
7f838794f000-7f8387950000 rw-p 00007000 fc:01 1033248                    /lib/x86_64-linux-gnu/librt-2.23.so
7f8387950000-7f8387968000 r-xp 00000000 fc:01 1033242                    /lib/x86_64-linux-gnu/libpthread-2.23.so
7f8387968000-7f8387b67000 ---p 00018000 fc:01 1033242                    /lib/x86_64-linux-gnu/libpthread-2.23.so
7f8387b67000-7f8387b68000 r--p 00017000 fc:01 1033242                    /lib/x86_64-linux-gnu/libpthread-2.23.so
7f8387b68000-7f8387b69000 rw-p 00018000 fc:01 1033242                    /lib/x86_64-linux-gnu/libpthread-2.23.so
7f8387b69000-7f8387b6d000 rw-p 00000000 00:00 0
7f8387b6d000-7f8387b93000 r-xp 00000000 fc:01 1033154                    /lib/x86_64-linux-gnu/ld-2.23.so
7f8387d87000-7f8387d8e000 rw-p 00000000 00:00 0
7f8387d8f000-7f8387d92000 rw-p 00000000 00:00 0
7f8387d92000-7f8387d93000 r--p 00025000 fc:01 1033154                    /lib/x86_64-linux-gnu/ld-2.23.so
7f8387d93000-7f8387d94000 rw-p 00026000 fc:01 1033154                    /lib/x86_64-linux-gnu/ld-2.23.so
7f8387d94000-7f8387d95000 rw-p 00000000 00:00 0
7ffdabad0000-7ffdabaf1000 rw-p 00000000 00:00 0                          [stack]
7ffdabb67000-7ffdabb6a000 r--p 00000000 00:00 0                          [vvar]
7ffdabb6a000-7ffdabb6c000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
2019/05/24 17:34:29 180337

***** FATAL SIGNAL RECEIVED *******
Received fatal signal: SIGABRT(6)       PID: 1

***** SIGNAL SIGABRT(6)

******* STACKDUMP *******
        stack dump [1]  /opt/typesense-server() [0x6b0f68]
        stack dump [2]  /lib/x86_64-linux-gnu/libpthread.so.0+0x113e0 [0x7f83879613e0]
        stack dump [3]  /lib/x86_64-linux-gnu/libc.so.6gsignal+0x38 [0x7f8386ea7428]
        stack dump [4]  /lib/x86_64-linux-gnu/libc.so.6abort+0x16a [0x7f8386ea902a]
        stack dump [5]  /lib/x86_64-linux-gnu/libc.so.6+0x777ea [0x7f8386ee97ea]
        stack dump [6]  /lib/x86_64-linux-gnu/libc.so.6+0x7fe0a [0x7f8386ef1e0a]
        stack dump [7]  /lib/x86_64-linux-gnu/libc.so.6cfree+0x4c [0x7f8386ef598c]

        stack dump [8]  /opt/typesense-server : Collection::search(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::vector<sort_by, std::allocator<sort_by> > const&, int, unsigned long, unsigned long, token_ordering, bool, unsigned long, spp::sparse_hash_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, spp::spp_hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, spp::libc_allocator_with_realloc<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, spp::sparse_hash_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, spp::spp_hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, spp::libc_allocator_with_realloc<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)+0x27f2 [0x56f5a2]

        stack dump [9]  /opt/typesense-server : get_search(http_req&, http_res&)+0x110b [0x59c08b]

        stack dump [10]  /opt/typesense-server : HttpServer::catch_all_handler(st_h2o_handler_t*, st_h2o_req_t*)+0x8a3 [0x5a8193]
        stack dump [11]  /opt/typesense-server() [0x60f2cd]
        stack dump [12]  /opt/typesense-server() [0x616cc0]
        stack dump [13]  /opt/typesense-server() [0x604251]
        stack dump [14]  /opt/typesense-server() [0x604378]
        stack dump [15]  /opt/typesense-serverh2o_evloop_run+0x2d [0x60600d]

        stack dump [16]  /opt/typesense-server : HttpServer::run()+0x211 [0x5a8d51]

        stack dump [17]  /opt/typesense-server : run_server(cmdline::parser&, void (*)(), void (*)())+0x9a3 [0x5f0e63]
        stack dump [18]  /opt/typesense-servermain+0x11b [0x5fd6fb]
        stack dump [19]  /lib/x86_64-linux-gnu/libc.so.6__libc_start_main+0xf0 [0x7f8386e92830]
        stack dump [20]  /opt/typesense-server() [0x556dfd]

Exiting after fatal event  (FATAL_SIGNAL). Fatal type:  SIGABRT
Log content flushed sucessfully to sink

2019/05/24 17:34:29 180337

***** FATAL SIGNAL RECEIVED *******
Received fatal signal: SIGABRT(6)       PID: 1

***** SIGNAL SIGABRT(6)

******* STACKDUMP *******
        stack dump [1]  /opt/typesense-server() [0x6b0f68]
        stack dump [2]  /lib/x86_64-linux-gnu/libpthread.so.0+0x113e0 [0x7f83879613e0]
        stack dump [3]  /lib/x86_64-linux-gnu/libc.so.6gsignal+0x38 [0x7f8386ea7428]
        stack dump [4]  /lib/x86_64-linux-gnu/libc.so.6abort+0x16a [0x7f8386ea902a]
        stack dump [5]  /lib/x86_64-linux-gnu/libc.so.6+0x777ea [0x7f8386ee97ea]
        stack dump [6]  /lib/x86_64-linux-gnu/libc.so.6+0x7fe0a [0x7f8386ef1e0a]
        stack dump [7]  /lib/x86_64-linux-gnu/libc.so.6cfree+0x4c [0x7f8386ef598c]

        stack dump [8]  /opt/typesense-server : Collection::search(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::vector<sort_by, std::allocator<sort_by> > const&, int, unsigned long, unsigned long, token_ordering, bool, unsigned long, spp::sparse_hash_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, spp::spp_hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, spp::libc_allocator_with_realloc<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, spp::sparse_hash_set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, spp::spp_hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, spp::libc_allocator_with_realloc<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >)+0x27f2 [0x56f5a2]

        stack dump [9]  /opt/typesense-server : get_search(http_req&, http_res&)+0x110b [0x59c08b]

        stack dump [10]  /opt/typesense-server : HttpServer::catch_all_handler(st_h2o_handler_t*, st_h2o_req_t*)+0x8a3 [0x5a8193]
        stack dump [11]  /opt/typesense-server() [0x60f2cd]
        stack dump [12]  /opt/typesense-server() [0x616cc0]
        stack dump [13]  /opt/typesense-server() [0x604251]
        stack dump [14]  /opt/typesense-server() [0x604378]
        stack dump [15]  /opt/typesense-serverh2o_evloop_run+0x2d [0x60600d]

        stack dump [16]  /opt/typesense-server : HttpServer::run()+0x211 [0x5a8d51]

        stack dump [17]  /opt/typesense-server : run_server(cmdline::parser&, void (*)(), void (*)())+0x9a3 [0x5f0e63]
        stack dump [18]  /opt/typesense-servermain+0x11b [0x5fd6fb]
        stack dump [19]  /lib/x86_64-linux-gnu/libc.so.6__libc_start_main+0xf0 [0x7f8386e92830]
        stack dump [20]  /opt/typesense-server() [0x556dfd]

Exiting after fatal event  (FATAL_SIGNAL). Fatal type:  SIGABRT
Log content flushed sucessfully to sink

exitWithDefaultSignalHandler:238. Exiting due to FATAL_SIGNAL, 6