# Anonymous Analytics Policy
# 1. Functional Specification
# I. Summary
This specification describes an exhaustive list of anonymous metrics collected by the MeiliSearch binary. It also describes the tools we use for this collection and how we identify a Meilisearch instance.
# II. Motivation
At MeiliSearch, our vision is to provide an easy-to-use search solution that meets the essential needs of our users. At all times, we strive to understand our users better and meet their expectations in the best possible way.
Although we can gather needs and understand our users through several channels such as Github, Slack, surveys, interviews or roadmap votes, we realize that this is not enough to have a complete view of MeiliSearch usage and features adoption. By cross-referencing our product discovery phases with aggregated quantitative data, we want to make the product much better than what it is today. Our decision-making will be taken a step further to make a product that users love.
# III. Explanation
# General Data Protection Regulation (GDPR)
The metrics collected are non-sensitive, non-personal and do not identify an individual or a group of individuals using MeiliSearch. The data collected is secured and anonymized. We do not collect any data from the values stored in the documents.
We, the MeiliSearch team, provide an email address so that users can request the removal of their data: [email protected].
Thanks to the unique identifier generated for their MeiliSearch installation (Instance UID
when launching MeiliSearch), we can remove the corresponding data from all the tools we describe below. Any questions regarding the management of the data collected can be sent to the email address as well.
# Tools
# Segment
The collected data is sent to Segment (opens new window). Segment is a platform for data collection and provides data management tools.
# Amplitude
Amplitude (opens new window) is a tool for graphing and highlighting collected data. Segment feeds Amplitude so that we can build visualizations according to our needs.
# Events table
Event name | Description |
---|---|
Launched | Occurs when MeiliSearch is launched the first time. |
Documents Searched POST | Aggregated event on all received requests via the POST - indexes/:indexUid/search route during one hour or until a batch size reaches 500Kb . |
Documents Searched GET | Aggregated event on all received requests via the GET - /indexes/:indexUid/search route during one hour or until a batch size reaches 500Kb . |
Facet Searched POST | Aggregated event on all received requests via the POST - /indexes/:indexUid/facet-search route during one hour or until a batch size reaches 500Kb . |
Documents Searched by Multi-Search POST | Aggregated event on all received requests via the POST - /multi-search route during one hour or until a batch size reaches 500Kb . |
Documents Added | Aggregated event on all received requests via the POST - /indexes/:indexUid/documents route during one hour or until a batch size reaches 500Kb . |
Documents Updated | Aggregated event on all received requests via the PUT - /indexes/:indexUid/documents route during one hour or until a batch size reaches 500Kb . |
Documents Fetched GET | Aggregated event on all received requests via the GET - /indexes/:indexUid/documents or GET - /indexes/:indexUid/documents/:doc_id routes during one hour or until a batch size reaches 500Kb . |
Documents Fetched POST | Aggregated event on all received requests via the POST - /indexes/:indexUid/documents/fetch routes during one hour or until a batch size reaches 500Kb . |
Documents Deleted | Aggregated event on all received requests via the DELETE - /indexes/:indexUid/documents , DELETE - /indexes/:indexUid/documents/:documentId , POST - indexes/:indexUid/documents/delete-batch , and POST - indexes/:indexUid/documents/delete routes during one hour or until a batch size reaches 500Kb . |
Index Created | Occurs when an index is created via POST - /indexes . |
Index Updated | Occurs when an index is updated via PUT - /indexes/:indexUid . |
Indexes Swapped | Occurs when indexes are swapped via POST - /swap-indexes . |
Settings Updated | Occurs when the settings are updated via POST - /indexes/:indexUid/settings . |
SearchableAttributes Updated | Occurs when searchable attributes are updated via POST - /indexes/:indexUid/settings/searchable-attributes . |
RankingRules Updated | Occurs when ranking rules are updated via POST - /indexes/:indexUid/settings/ranking-rules . |
FilterableAttributes Updated | Occurs when filterable attributes are updated via POST - /indexes/:indexUid/settings/filterable-attributes . |
SortableAttributes Updated | Occurs when sortable attributes are updated via POST - /indexes/:indexUid/settings/sortable-attributes . |
TypoTolerance Updated | Occurs when typo tolerance settings are updated via POST - /indexes/:indexUid/settings/typo-tolerance . |
Pagination Updated | Occurs when pagination settings are updated via PATCH — /indexes/:indexUid/settings/pagination . |
Faceting Updated | Occurs when faceting settings are updated via PATCH — /indexes/:indexUid/settings/faceting . |
DistinctAttribute Updated | Occurs when distinct attribute setting is updated via PUT — /indexes/:indexUid/settings/distinct-attribute . |
ProximityPrecision Updated | Occurs when proximity precision setting is updated via PUT — /indexes/:indexUid/settings/proximity-precision . |
DisplayedAttributes Updated | Occurs when displayed attributes are updated via PUT — /indexes/:indexUid/settings/displayed-attributes . |
StopWords Updated | Occurs when stop words are updated via PUT — /indexes/:indexUid/settings/stop-words . |
SeparatorTokens Updated | Occurs when separator tokens are updated via PUT — /indexes/:indexUid/settings/separator-tokens . |
NonSeparatorTokens Updated | Occurs when non separator tokens are updated via PUT — /indexes/:indexUid/settings/non-separator-tokens . |
Synonyms Updated | Occurs when synonyms are updated via PUT — /indexes/:indexUid/settings/synonyms . |
Dump Created | Occurs when a dump is created via POST - /dumps . |
Snapshot Created | Occurs when a snapshot is created via POST - /snapshots . |
Tasks Canceled | Occurs when tasks are requested to be canceled via POST - /tasks/cancel . |
Tasks Deleted | Occurs when tasks are requested to be deleted via DELETE - /tasks . |
Tasks Seen | Aggregated event on all received requests via the GET - /tasks route during one hour or until a batch size reaches 500Kb . |
Stats Seen | Occurs when stats are fetched via GET - /stats or /indexes/:indexUid/stats . |
Health Seen | Aggregated event on all received requests via the GET - /health route during one hour or until a batch size reaches 500Kb . |
Version Seen | Occurs when GET - /version is fetched. |
Experimental features Seen | Occurs when GET - /experimental-features is fetched. |
Experimental features Updated | Occurs when experimental features are updated via PATCH - /experimental-features |
# Summarized Metrics/Events table
Metric name | Description | Example | Triggered by |
---|---|---|---|
context.app.version | MeiliSearch version number | 0.23.0 | Every hour |
infos.env | MeiliSearch env | production | Every hour |
infos.db_path | true if --db-path /MEILI_DB_PATH is specified, otherwise false | true | Every Hour |
infos.import_dump | true if --import-dump is specified, otherwise false | true | Every Hour |
infos.dump_dir | true if --dump-dir /MEILI_DUMP_DIR is specified, otherwise false | true | Every Hour |
infos.ignore_missing_dump | true if --ignore-missing-dump is specified to true, otherwise false | true | Every Hour |
infos.ignore_dump_if_db_exists | true if --ignore-dump-if-db-exists is specified to true, otherwise false | true | Every Hour |
infos.import_snapshot | true if --import-snapshot is specified, otherwise false | true | Every Hour |
infos.schedule_snapshot | Value of --schedule_snapshot /MEILI_SCHEDULE_SNAPSHOT if scheduled snapshots are enabled, otherwise None | 86400 | Every hour |
infos.snapshot_dir | true if --snapshot-dir /MEILI_SNAPSHOT_DIR is specified to true, otherwise false | true | Every Hour |
infos.ignore_missing_snapshot | true if --ignore_missing_snapshot is specified to true, otherwise false | true | Every Hour |
infos.ignore_snapshot_if_db_exists | true if --ignore_snapshot_if_db_exists is specified to true, otherwise false | true | Every Hour |
infos.http_addr | true if --http-addr /MEILI_HTTP_ADDR is specified, otherwise false | true | Every Hour |
infos.http_payload_size_limit | Value of --http-payload-size-limit /MEILI_HTTP_PAYLOAD_SIZE_LIMIT in bytes | 336042103 | Every Hour |
infos.log_level | Value of --log-level /MEILI_LOG_LEVEL | debug | Every Hour |
infos.max_indexing_memory | Value of --max-indexing-memory /MEILI_MAX_INDEXING_MEMORY in bytes | 336042103 | Every Hour |
infos.max_indexing_threads | Value of --max-indexing-threads /MEILI_MAX_INDEXING_THREADS in integer | 4 | Every Hour |
infos.ssl_auth_path | true if --ssl-auth-path /MEILI_SSL_AUTH_PATH is specified, otherwise false | false | Every Hour |
infos.ssl_cert_path | true if --ssl-cert-path /MEILI_SSL_CERT_PATH is specified, otherwise false | false | Every Hour |
infos.ssl_key_path | true if --ssl-key-path /MEILI_SSL_KEY_PATH is specified, otherwise false | false | Every Hour |
infos.ssl_ocsp_path | true if --ssl-ocsp-path /MEILI_SSL_OCSP_PATH is specified, otherwise false | false | Every Hour |
infos.ssl_require_auth | Value of --ssl-require-auth /MEILI_SSL_REQUIRE_AUTH as a boolean | false | Every Hour |
infos.ssl_resumption | true if --ssl-resumption /MEILI_SSL_RESUMPTION is specified, otherwise false | false | Every Hour |
infos.ssl_tickets | true if --ssl-tickets /MEILI_SSL_TICKETS is specified, otherwise false | false | Every Hour |
infos.with_configuration_file | true if the instance is launched with a configuration file, otherwise false | false | Every Hour |
infos.task_queue_webhook | true if the instance is launched with a task queue webhook, otherwise false | false | Every Hour |
infos.experimental_enable_metrics | true if --experimental-enable-metrics /MEILI_EXPERIMENTAL_ENABLE_METRICS is specified at launch, otherwise false | false | Every Hour |
infos.experimental_replication_parameters | true if --experimental-replication-parameters /MEILI_EXPERIMENTAL_REPLICATION_PARAMETERS is specified at launch, otherwise false | false | Every Hour |
infos.experimental_logs_mode | human or json depending on the value specified. | human | Every Hour |
infos.experimental_enable_logs_route | true if --experimental-enable-logs-route /MEILI_EXPERIMENTAL_ENABLE_LOGS_ROUTE is specified at launch, otherwise false | false | Every Hour |
infos.experimental_reduce_indexing_memory_usage | true if --experimental-reduce-indexing-memory-usage /MEILI_EXPERIMENTAL_REDUCE_INDEXING_MEMORY_USAGE is specified at launch, otherwise false | false | Every Hour |
infos.gpu_enabled | true if Meilisearch was compiled with CUDA support, otherwise false | false | Every Hour |
system.distribution | Distribution on which MeiliSearch is launched | Arch Linux | Every hour |
system.kernel_version | Kernel version on which MeiliSearch is launched | 5.14.10 | Every hour |
system.cores | Number of cores | 24 | Every hour |
system.ram_size | Total RAM capacity. Expressed in KB | 16777216 | Every hour |
system.disk_size | Total capacity of the largest disk. Expressed in Bytes | 1048576000 | Every hour |
system.server_prodiver | Users can tell us on which provider MeiliSearch is hosted by filling the MEILI_SERVER_PROVIDER env var. This is also filled by our cloud deploy scripts, e.g. GCP cloud-config.yaml (opens new window) | gcp | Every hour |
stats.database_size | Database size. Expressed in Bytes | 2621440 | Every hour |
stats.indexes_number | Number of indexes | 2 | Every hour |
start_since_days | Number of days since instance was launched | 365 | Every hour |
user_agent | User-agent header encountered during one or more API calls | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] | Documents Searched POST , Documents Searched GET , Index Created , Index Updated , Documents Added , Documents Updated , Documents Deleted , Settings Updated , Ranking Rules Updated , SortableAttributes Updated , FilterableAttributes Updated , SearchableAttributes Updated , TypoTolerance Updated , Pagination Updated , Faceting Updated , DistinctAttribute Updated , DisplayedAttributes Updated , StopWords Updated , Synonyms Updated , Dump Created , Snapshot Created , Tasks Seen , Stats Seen , Health Seen , Version Seen , Documents Searched by Multi-Search POST , Experimental features Seen , Experimental features Updated |
requests.99th_response_time | Highest latency from among the fastest 99% of successful search requests | 57ms | Documents Searched POST , Documents Searched GET |
requests.total_succeeded | Total number of successful requests in this batch | 3456 | Documents Searched POST , Documents Searched GET , Documents Searched by Multi-Search POST |
requests.total_failed | Total number of failed requests in this batch | 24 | Documents Searched POST , Documents Searched GET , Documents Searched by Multi-Search POST |
requests.total_received | Total number of received requests in this batch | 3480 | Documents Searched POST , Documents Searched GET , Documents Deleted , Documents Fetched GET , Documents Fetched POST , Health Seen , Tasks Seen , Documents Searched by Multi-Search POST |
sort.with_geoPoint | true if the sort rule _geoPoint was used in this batch, otherwise false | true | Documents Searched POST , Documents Searched GET |
sort.avg_criteria_number | Average number of sort criteria among all requests containing the sort parameter in this batch | 2 | Documents Searched POST , Documents Searched GET |
filter.with_geoRadius | true if the filter rule _geoRadius was used in this batch, otherwise false | false | Documents Searched POST , Documents Searched GET |
filter.with_geoBoundingBox | true if the filter rule _geoBoundingBox was used in this batch, otherwise false | false | Documents Searched POST , Documents Searched GET |
filter.most_used_syntax | Most used filter syntax among all requests containing the filter parameter in this batch | string | Documents Searched POST , Documents Searched GET |
attributes_to_search_on.total_number_of_uses | Total number of queries where attributesToSearchOn is set | 5 | Documents Searched POST , Documents Searched GET |
q.max_terms_number | Highest number of terms given for the q parameter in this batch | 5 | Documents Searched POST , Documents Searched GET |
vector.max_vector_size | Highest number of dimensions given for the vector parameter in this batch | 1536 | Documents Searched POST , Documents Searched GET , Documents Searched by Multi-Search POST |
pagination.max_limit | Highest value given for the limit parameter in this batch | 60 | Documents Searched POST , Documents Searched GET , Documents Fetched GET , Documents Fetched POST |
pagination.max_offset | Highest value given for the offset parameter in this batch | 1000 | Documents Searched POST , Documents Searched GET , Documents Fetched GET , Documents Fetched POST |
pagination.most_used_navigation | Most used search results navigation among all search requests in this batch. estimated / exhaustive | estimated | Documents Searched POST , Documents Searched GET |
formatting.max_attributes_to_retrieve | The maximum number of attributes to retrieve encountered among all requests in this batch. | 100 | Documents Searched POST , Documents Searched GET |
formatting.max_attributes_to_highlight | The maximum number of attributes to highlight encountered among all requests in this batch. | 100 | Documents Searched POST , Documents Searched GET |
formatting.highlight_pre_tag | true if highlightPreTag was used in this batch, otherwise false | false | Documents Searched POST , Documents Searched GET |
formatting.highlight_post_tag | true if highlightPostTag was used in this batch, otherwise false | false | Documents Searched POST , Documents Searched GET |
formatting.max_attributes_to_crop | The maximum number of attributes to crop encountered among all requests in this batch. | 100 | Documents Searched POST , Documents Searched GET |
formatting.crop_length | true if cropLength was used in this batch, otherwise false | false | Documents Searched POST , Documents Searched GET |
formatting.crop_marker | true if cropMarker was used in this batch, otherwise false | false | Documents Searched POST , Documents Searched GET |
formatting.show_matches_position | true if showMatchesPosition was used in this batch, otherwise false | false | Documents Searched POST , Documents Searched GET |
facets.avg_facets_number | The average number of facets among all the requests containing the facets parameter in this batch. "facets": [] equals to 0 while not sending facets does not influence the average in the aggregated event. | 10 | Documents Searched POST , Documents Searched GET |
primary_key | Value given for the primaryKey parameter if used, otherwise null | id | Index Created , Index Updated , Documents Added , Documents Updated |
payload_type | All payload_type encountered in this batch | ["application/json", "text/plain", "application/x-ndjson"] | Documents Added , Documents Updated |
index_creation | true if a document addition or update request triggered index creation in this batch, otherwise false | true | Documents Added , Documents Updated |
ranking_rules.words_position | Position of the words ranking rule if any, otherwise null | 1 | Settings Updated , Ranking Rules Updated |
ranking_rules.typo_position | Position of the typo ranking rule if any, otherwise null | 2 | Settings Updated , Ranking Rules Updated |
ranking_rules.proximity_position | Position of the proximity ranking rule if any, otherwise null | 3 | Settings Updated , Ranking Rules Updated |
ranking_rules.attribute_position | Position of the attribute ranking rule if any, otherwise null | 4 | Settings Updated , Ranking Rules Updated |
ranking_rules.sort_position | Position of the sort ranking rule if any, otherwise null . | 5 | Settings Updated , Ranking Rules Updated |
ranking_rules.exactness_position | Position of the exactness ranking rule if any, otherwise null . | 6 | Settings Updated , Ranking Rules Updated |
ranking_rules.values | A string representing the ranking rules without the custom asc-desc rules. | "words, typo, attribute, sort, exactness" | Settings Updated , Ranking Rules Updated |
sortable_attributes.total | Number of sortable attributes | 3 | Settings Updated , SortableAttributes Updated |
sortable_attributes.has_geo | true if _geo is set as a sortable attribute, otherwise false | true | Settings Updated , SortableAttributes Updated |
filterable_attributes.total | Number of filterable attributes | 3 | Settings Updated , FilterableAttributes Updated |
filterable_attributes.has_geo | true if _geo is set as a filterable attribute, otherwise false | false | Settings Updated , FilterableAttributes Updated |
searchable_attributes.total | Number of searchable attributes | 4 | Settings Updated , SearchableAttributes Updated |
searchable_attributes.with_wildcard | true if * is specified as a searchable attribute, otherwise false . | false | Settings Updated , SearchableAttributes Updated |
typo_tolerance.enabled | Whether the typo tolerance is enabled | true | Settings Updated , TypoTolerance Updated |
typo_tolerance.disable_on_attributes | true if at least one value is defined | false | Settings Updated , TypoTolerance Updated |
typo_tolerance.disable_on_words | true if at least one value is defined | false | Settings Updated , TypoTolerance Updated |
typo_tolerance.min_word_size_for_typos.one_typo | The defined value for minWordSizeForTypos.oneTypo property | 5 | Settings Updated , TypoTolerance Updated |
typo_tolerance.min_word_size_for_typos.two_typos | The defined value for minWordSizeForTypos.twoTypos property | 9 | Settings Updated , TypoTolerance Updated |
pagination.max_total_hits | The defined value for pagination.maxTotalHits property | 1000 | Settings Updated , Pagination Updated |
faceting.max_values_per_facet | The defined value for faceting.maxValuesPerFacet property | 100 | Settings Updated , Faceting Updated |
faceting.sort_facet_values_by_star_count | Whether the user set all fields to be sort by count | true | Settings Updated , Faceting Updated |
faceting.sort_facet_values_by_total | The number of different values that were set | 10 | Settings Updated , Faceting Updated |
distinct_attribute.set | true if a field name is specified as a distrinct attribute, otherwise false . | false | Settings Updated , DistinctAttribute Updated |
proximity_precision.set | true the setting has been manually set, otherwise false . | false | Settings Updated , ProximityPrecision Updated |
proximity_precision.value | byWord or byAttribute if the setting has been set, otherwise null . | null | Settings Updated , ProximityPrecision Updated |
displayed_attributes.total | Number of displayed attributes. | 3 | SettingUpdated , DisplayedAttributes Updated |
displayed_attributes.with_wildcard | true if * is specified as a displayed attribute, otherwise false . | false | SettingUpdated , DisplayedAttributes Updated |
stop_words.total | Number of stop words. | 3 | Settings Updated , StopWords Updated |
separator_tokens.total | Number of separator tokens. | 3 | Settings Updated , SeparatorTokens Updated |
non_separator_tokens.total | Number of non separator tokens. | 3 | Settings Updated , NonSeparatorTokens Updated |
dictionary.total | Number of words in the dictionary. | 3 | Settings Updated , Dictionary Updated |
synonyms.total | Number of synonyms. | 3 | Settings Updated , Synonyms Updated |
per_task_uid | true if an uid is used to fetch a particular task resource, otherwise false | true | Tasks Seen |
filtered_by_uid | true if tasks are filtered by the uids query parameter, otherwise false | false | Tasks Seen , Tasks Canceled , Tasks Deleted |
filtered_by_index_uid | true if tasks are filtered by the indexUids query parameter, otherwise false | false | Tasks Seen , Tasks Canceled , Tasks Deleted |
filtered_by_type | true if tasks are filtered by the types query parameter, otherwise false | false | Tasks Seen , Tasks Canceled , Tasks Deleted |
filtered_by_status | true if tasks are filtered by the statuses query parameter, otherwise false | false | Tasks Seen , Tasks Canceled , Tasks Deleted |
filtered_by_canceled_by | true if tasks are filtered by the canceledBy query parameter, otherwise false | false | Tasks Seen , Tasks Canceled , Tasks Deleted |
filtered_by_before_enqueued_at | true if tasks are filtered by the beforeEnqueuedAt query parameter, otherwise false | false | Tasks Seen , Tasks Canceled , Tasks Deleted |
filtered_by_after_enqueued_at | true if tasks are filtered by the afterEnqueuedAt query parameter, otherwise false | false | Tasks Seen , Tasks Canceled , Tasks Deleted |
filtered_by_before_started_at | true if tasks are filtered by the beforeStartedAt query parameter, otherwise false | false | Tasks Seen , Tasks Canceled , Tasks Deleted |
filtered_by_after_started_at | true if tasks are filtered by the afterStartedAt query parameter, otherwise false | false | Tasks Seen , Tasks Canceled , Tasks Deleted |
filtered_by_before_finished_at | true if tasks are filtered by the beforeFinishedAt query parameter, otherwise false | false | Tasks Seen , Tasks Canceled , Tasks Deleted |
filtered_by_after_finished_at | true if tasks are filtered by the afterFinishedAt query parameter, otherwise false | false | Tasks Seen , Tasks Canceled , Tasks Deleted |
per_index_uid | true if an uid is used to fetch an index stat resource, otherwise false | false | Stats Seen |
searches.avg_search_count | The average number of search queries received per call for the aggregated event. | 4.2 | Documents Searched by Multi-Search POST |
searches.total_search_count | The total number of search queries received for the aggregated event. | 16023 | Documents Searched by Multi-Search POST |
indexes.avg_distinct_index_count | The average number of queried indexes received per call for the aggregated event. | 1.2 | Documents Searched by Multi-Search POST |
indexes.total_distinct_index_count | The total number of distinct indexes queries for the aggregated event. | 6023 | Documents Searched by Multi-Search POST |
indexes.total_single_index | The total number of calls where only one index where queried. | 2007 | Documents Searched by Multi-Search POST |
swap_operation_number | The number of swap operation given in POST /swap-indexes API call | 2 | Indexes Swapped |
matching_strategy.most_used_strategy | Most used word matching strategy among all search requests in this batch | last | Documents Searched POST , Documents Searched GET |
per_document_id | true if DELETE /indexes/:indexUid/documents/:documentUid endpoint was used in this batch, otherwise false | false | Documents Deleted |
per_batch | true if POST /indexes/:indexUid/documents/delete-batch endpoint was used in this batch, otherwise false | false | Documents Deleted |
per_filter | true if POST /indexes/:indexUid/documents/delete endpoint was used in this batch, otherwise false | false | Documents Fetched GET , Documents Fetched POST , Documents Deleted |
clear_all | true if DELETE /indexes/:indexUid/documents endpoint was used in this batch, otherwise false | false | Documents Deleted |
vector_store | Whether the vector store feature is enabled. | true | Experimental features Updated |
scoring.show_ranking_score | Was showRankingScore used in the aggregated event? If yes, true , otherwise false | false | Documents Searched POST , Documents Searched GET , Documents Searched by Multi-Search POST |
scoring.show_ranking_score_details | Was showRankingScoreDetails used in the aggregated event? If yes, true , otherwise false | false | Documents Searched POST , Documents Searched GET , Documents Searched GET |
facets.total_distinct_facet_count | The total number of distinct facets queried for the aggregated event | 3 | Facet Searched POST |
facets.additional_search_parameters_provided | Were additional search parameters provided for the aggregated event | true | Facet Searched POST |
# Detailed list of Instance metrics and, events with their metrics
# System Configuration system
This property allows us to gather essential information to better understand on which type of machine MeiliSearch is used. This allows us to better advise users on the machines to choose according to their data volume and their use-cases.
Property name | Description | Example |
---|---|---|
system.distribution | Distribution on which MeiliSearch is launched | Arch Linux |
system.kernel_version | Kernel version on which MeiliSearch is launched | 5.14.10-arch1-1 |
system.cores | Number of cores | 24 |
system.ram_size | Total RAM capacity. Expressed in KB | 33604210 |
system.disk_size | Total capacity of the largest disk. Expressed in Bytes | 336042103 |
system.server_provider | Users can tell us on which provider MeiliSearch is hosted by filling the MEILI_SERVER_PROVIDER env var. This is also filled by our providers deploy scripts. e.g. GCP cloud-config.yaml (opens new window) | gcp |
# MeiliSearch Configuration context
and infos
Property name | Description | Example |
---|---|---|
context.app.version | MeiliSearch version number. Sent in a context object instead of properties to match Amplitude requirement | 0.23.0 |
infos.env | Value of --env /MEILI_ENV | production |
infos.db_path | true if --db-path /MEILI_DB_PATH is specified, otherwise false | true |
infos.import_dump | true if --import-dump is specified, otherwise false | true |
infos.dump_dir | true if --dump-dir /MEILI_DUMP_DIR is specified, otherwise false | true |
infos.ignore_missing_dump | true if --ignore-missing-dump is specified to true, otherwise false | true |
infos.ignore_dump_if_db_exists | true if --ignore-dump-if-db-exists is specified to true, otherwise false | true |
infos.import_snapshot | true if --import-snapshot is specified, otherwise false | true |
infos.schedule_snapshot | Value of --schedule_snapshot /MEILI_SCHEDULE_SNAPSHOT if scheduled snapshots are enabled, otherwise None | 86400 |
infos.snapshot_dir | true if --snapshot-dir /MEILI_SNAPSHOT_DIR is specified to true, otherwise false | true |
infos.ignore_missing_snapshot | true if --ignore-missing-snapshot is specified to true, otherwise false | true |
infos.ignore_snapshot_if_db_exists | true if --ignore-snapshot-if-db-exists is specified to true, otherwise false | true |
infos.http_addr | true if --http-addr /MEILI_HTTP_ADDR is specified, otherwise false | true |
infos.http_payload_size_limit | Value of --http-payload-size-limit /MEILI_HTTP_PAYLOAD_SIZE_LIMIT in bytes | 336042103 |
infos.log_level | Value of --log-level /MEILI_LOG_LEVEL | debug |
infos.max_indexing_memory | Value of --max-indexing-memory /MEILI_MAX_INDEXING_MEMORY in bytes | 336042103 |
infos.max_indexing_threads | Value of --max-indexing-threads /MEILI_MAX_INDEXING_THREADS in integer | 4 |
infos.ssl_auth_path | true if --ssl-auth-path /MEILI_SSL_AUTH_PATH is specified, otherwise false | false |
infos.ssl_cert_path | true if --ssl-cert-path /MEILI_SSL_CERT_PATH is specified, otherwise false | false |
infos.ssl_key_path | true if --ssl-key-path /MEILI_SSL_KEY_PATH is specified, otherwise false | false |
infos.ssl_ocsp_path | true if --ssl-ocsp-path /MEILI_SSL_OCSP_PATH is specified, otherwise false | false |
infos.ssl_require_auth | Value of --ssl-require-auth /MEILI_SSL_REQUIRE_AUTH as a boolean | false |
infos.ssl_resumption | true if --ssl-resumption /MEILI_SSL_RESUMPTION is specified, otherwise false | false |
infos.ssl_tickets | true if --ssl-tickets /MEILI_SSL_TICKETS is specified, otherwise false | false |
infos.with_configuration_file | true if the instance is launched with a configuration file, otherwise false | false |
infos.task_queue_webhook | true if the instance is launched with a task queue webhook, otherwise false | false |
infos.experimental_enable_metrics | true if --experimental-enable-metrics /MEILI_EXPERIMENTAL_ENABLE_METRICS is specified at launch, otherwise false | false |
infos.experimental_replication_parameters | true if --experimental-replication-parameters /MEILI_EXPERIMENTAL_REPLICATION_PARAMETERS is specified at launch, otherwise false | false |
infos.experimental_logs_mode | human or json depending on the value specified. | human |
infos.experimental_enable_logs_route | true if --experimental-enable-logs-route /MEILI_EXPERIMENTAL_ENABLE_LOGS_ROUTE is specified at launch, otherwise false | false |
infos.experimental_reduce_indexing_memory_usage | true if --experimental-reduce-indexing-memory-usage /MEILI_EXPERIMENTAL_REDUCE_INDEXING_MEMORY_USAGE is specified at launch, otherwise false | false |
infos.gpu_enabled | true if Meilisearch was compiled with CUDA support, otherwise false | false |
# MeiliSearch Statistics stats
Property name | Description | Example |
---|---|---|
stats.database_size | Database size. Expressed in Bytes | 180230 |
stats.indexes_number | Number of indexes | 2 |
stats.documents_number | Number of indexed documents | 165847 |
start_since_days | Number of days since instance was launched | 328 |
# Launched
This is the first event sent to mark that MeiliSearch is launched a first time.
# Documents Searched POST
The Documents Searched event is sent once an hour or when a batch reaches the maximum size of
500kb
. The event's properties are averaged over all requests onPOST
-/indexes/:indexUid/search
.
Property name | Description | Example |
---|---|---|
user_agent | Represents all the user-agents encountered on this endpoint in the aggregated event. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
requests.99th_response_time | The maximum latency, in ms , for the fastest 99% of succeeded requests in the aggregated event. | 57ms |
requests.total_succeeded | The total number of succeeded search requests in the aggregated event. | 3456 |
requests.total_failed | The total number of failed search requests in the aggregated event. | 24 |
requests.total_received | The total number of received search requests in the aggregated event. | 3480 |
sort.with_geoPoint | Does the built-in sort rule _geoPoint rule has been used in the aggregated event? | true |
sort.avg_criteria_number | The average number of sort criteria among all the requests containing the sort parameter in the aggregated event. "sort": [] equals to 0 while not sending sort does not influence the average. | 2 |
filter.with_geoRadius | Does the built-in filter rule _geoRadius has been used in the aggregated event? | false |
filter.with_geoBoundingBox | Does the built-in filter rule _geoBoundingBox has been used in the aggregated event? | false |
filter.avg_criteria_number | The average number of filter criteria among all the requests containing the filter parameter in the aggregated event. "filter": [] equals to 0 while not sending filter does not influence the average in the aggregated event. | 4 |
filter.most_used_syntax | The most used filter syntax among all the requests containing the requests containing the filter parameter in the aggregated event. string / array / mixed | mixed |
attributes_to_search_on.total_number_of_uses | Total number of queries where attributesToSearchOn is set | 5 |
q.max_terms_number | The maximum number of terms for the q parameter among all requests in the aggregated event. | 5 |
vector.max_vector_size | The maximum number of dimensions for the vector parameter among all requests in the aggregated event. | 1536 |
pagination.max_limit | The maximum limit encountered among all requests in the aggregated event. | 20 |
pagination.max_offset | The maximum offset encountered among all requests in the aggregated event. | 1000 |
pagination.most_used_navigation | Most used search results navigation among all requests in the aggregated event. estimated / exhaustive | estimated |
formatting.max_attributes_to_retrieve | The maximum number of attributes to retrieve encountered among all requests in the aggregated event. | 100 |
formatting.max_attributes_to_highlight | The maximum number of attributes to highlight encountered among all requests in the aggregated event. | 100 |
formatting.highlight_pre_tag | Does highlightPreTag has been used in the aggregated event? If yes, true otherwise false | false |
formatting.highlight_post_tag | Does highlightPostTag has been used in the aggregated event? If yes, true otherwise false | false |
formatting.max_attributes_to_crop | The maximum number of attributes to crop encountered among all requests in the aggregated event. | 100 |
formatting.crop_length | Does cropLength has been used in the aggregated event? If yes, true otherwise false | false |
formatting.crop_marker | Does cropMarker has been used in the aggregated event? If yes, true otherwise false | false |
formatting.show_matches_position | Was showMatchesPosition used in the aggregated event? If yes, true otherwise false | false |
facets.avg_facets_number | The average number of facets among all the requests containing the facets parameter in the aggregated event. "facets": [] equals to 0 while not sending facets does not influence the average in the aggregated event. | 10 |
matching_strategy.most_used_strategy | Most used word matching strategy among all search requests in the aggregated event. last / all | last |
scoring.show_ranking_score | Was showRankingScore used in the aggregated event? If yes, true , otherwise false | false |
scoring.show_ranking_score_details | Was showRankingScoreDetails used in the aggregated event? If yes, true , otherwise false | false |
# Documents Searched GET
The Documents Searched event is sent once an hour or when a batch reaches the maximum size of
500kb
. The event's properties are averaged over all requests onGET
-/indexes/:indexUid/search
.
Property name | Description | Example |
---|---|---|
user_agent | Represents all the user-agents encountered on this endpoint in the aggregated event. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
requests.99th_response_time | Highest latency from among the fastest 99% of successful search requests. | 57ms |
requests.total_succeeded | The total number of succeeded search requests in the aggregated event. | 3456 |
requests.total_failed | The total number of failed search requests in the aggregated event. | 24 |
requests.total_received | The total number of received search requests in the aggregated event. | 3480 |
sort.with_geoPoint | Does the built-in sort rule _geoPoint rule has been used in the aggregated event? | true |
sort.avg_criteria_number | The average number of sort criteria among all the requests containing the sort parameter in the aggregated event. "sort": [] equals to 0 while not sending sort does not influence the average. | 2 |
filter.with_geoRadius | Does the built-in filter rule _geoRadius has been used in the aggregated event? | false |
filter.with_geoBoundingBox | Does the built-in filter rule _geoBoundingBox has been used in the aggregated event? | false |
filter.avg_criteria_number | The average number of filter criteria among all the requests containing the filter parameter in the aggregated event. "filter": [] equals to 0 while not sending filter does not influence the average in the aggregated event. | 4 |
filter.most_used_syntax | The most used filter syntax among all the requests containing the requests containing the filter parameter in the aggregated event. string / array / mixed | mixed |
attributes_to_search_on.total_number_of_uses | Total number of queries where attributesToSearchOn is set | 5 |
q.max_terms_number | The maximum number of terms for the q parameter among all requests in the aggregated event. | 5 |
pagination.max_limit | The maximum limit encountered among all requests in the aggregated event. | 20 |
pagination.max_offset | The maximum offset encountered among all requests in the aggregated event. | 1000 |
pagination.most_used_navigation | Most used search results navigation among all requests in the aggregated event. estimated / exhaustive | estimated |
formatting.max_attributes_to_retrieve | The maximum number of attributes to retrieve encountered among all requests in the aggregated event. | 100 |
formatting.max_attributes_to_highlight | The maximum number of attributes to highlight encountered among all requests in the aggregated event. | 100 |
formatting.highlight_pre_tag | Does highlightPreTag has been used in the aggregated event? If yes, true otherwise false | false |
formatting.highlight_post_tag | Does highlightPostTag has been used in the aggregated event? If yes, true otherwise false | false |
formatting.max_attributes_to_crop | The maximum number of attributes to crop encountered among all requests in the aggregated event. | 100 |
formatting.crop_length | Does cropLength has been used in the aggregated event? If yes, true otherwise false | false |
formatting.crop_marker | Does cropMarker has been used in the aggregated event? If yes, true otherwise false | false |
formatting.show_matches_position | Does showMatchesPosition has been used in the aggregated event? If yes, true otherwise false | false |
facets.avg_facets_number | The average number of facets among all the requests containing the facets parameter in the aggregated event. "facets": [] equals to 0 while not sending facets does not influence the average in the aggregated event. | 10 |
matching_strategy.most_used_strategy | Most used word matching strategy among all search requests in the aggregated event. last / all | last |
scoring.show_ranking_score | Was showRankingScore used in the aggregated event? If yes, true , otherwise false | false |
scoring.show_ranking_score_details | Was showRankingScoreDetails used in the aggregated event? If yes, true , otherwise false | false |
# Facet Searched POST
The Facet Searched event is sent once an hour or when a batch reaches the maximum size of
500kb
. The event's properties are averaged over all requests onPOST
-/indexes/:indexUid/facet-search
.
Property name | Description | Example |
---|---|---|
user_agent | Represents all the user-agents encountered on this endpoint in the aggregated event. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
requests.99th_response_time | Highest latency from among the fastest 99% of successful search requests. | 57ms |
requests.total_succeeded | The total number of succeeded search requests in the aggregated event. | 3456 |
requests.total_failed | The total number of failed search requests in the aggregated event. | 24 |
requests.total_received | The total number of received search requests in the aggregated event. | 3480 |
facets.total_distinct_facet_count | The total number of distinct facets queried for the aggregated event. | 3 |
facets.additional_search_parameters_provided | Were additional search parameters provided for the aggregated event. | true |
# Documents Searched by Multi-Search POST
The Documents Searched event is sent once an hour or when a batch reaches the maximum size of
500kb
. The event's properties are averaged over all requests onPOST
-/multi-search
.
Property name | Description | Example |
---|---|---|
user_agent | Represents all the user-agents encountered on this endpoint in the aggregated event. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
requests.total_succeeded | The number of succeeded calls on the endpoint for the aggregated event. | 3456 |
requests.total_failed | The number of calls on the endpoint for the aggregated event. | 24 |
requests.total_received | The number of calls on the endpoint for the aggregated event. | 3480 |
searches.avg_search_count | The average number of search queries received per call for the aggregated event. | 4.2 |
searches.total_search_count | The total number of search queries received for the aggregated event. | 16023 |
indexes.avg_distinct_index_count | The average number of queried indexes received per call for the aggregated event. | 1.2 |
indexes.total_distinct_index_count | The total number of distinct indexes queries for the aggregated event. | 6023 |
indexes.total_single_index | The total number of calls where only one index where queried. | 2007 |
# Index Created
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered for this API call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
primary_key | The field's name used as a primary key if set, otherwise null . | id |
# Index Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered for this API call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
primary_key | The field's name used as a primary key if set, otherwise null . | id |
# Indexes Swapped
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered for this API call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
swap_operation_number | The number of swap operation given for this API call. | 2 |
# Documents Added
The Documents Added event is sent once an hour or when a batch reaches the maximum size of
500kb
. The event's properties are averaged over all requests onPOST
-/indexes/:indexUid/documents
.
Property name | Description | Example |
---|---|---|
user_agent | Represents all the user-agents encountered on this endpoint in the aggregated event. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
payload_type | Represents all the payload_type encountered on this endpoint in the aggregated event as a set. application/json / application/x-ndjson / text/plain or any non-supported content-type. | [text/plain , application/json ] |
primary_key | Represents all the primaryKey query parameters encountered in the aggregated event as a set, otherwise null . | ["id"] |
index_creation | Does an index creation happened among all requests in the aggregated event? | false |
# Documents Updated
The Documents Updated event is sent once an hour or when a batch reaches the maximum size of
500kb
. The event's properties are averaged over all requests onPUT
-/indexes/:indexUid/documents
.
Property name | Description | Example |
---|---|---|
user_agent | Represents all the user-agents encountered on this endpoint in the aggregated event. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
payload_type | Represents all the payload_type encountered on this endpoint in the aggregated event as a set. application/json / application/x-ndjson / text/plain or any non-supported content-type. | [text/plain , application/json ] |
primary_key | Represents all the primaryKey query parameters encountered in the aggregated event as a set, otherwise null . | ["id"] |
index_creation | Does an index creation happened among all requests in the aggregated event? | false |
# Documents Deleted
The Documents Deleted event is sent once an hour or when a batch reaches the maximum size of
500kb
.
Property name | Description | Example |
---|---|---|
user_agent | Represents all the user-agents encountered on this endpoint in the aggregated event. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
requests.total_received | The total number of received requests in the aggregated event. | 3480 |
per_document_id | true if DELETE /indexes/:indexUid/documents/:documentUid endpoint is called in the aggregated event, otherwise false | false |
clear_all | true if DELETE /indexes/:indexUid/documents endpoint is called in the aggregated event, otherwise false | false |
per_batch | true if POST /indexes/:indexUid/documents/delete-batch endpoint is called in the aggregated event, otherwise false | false |
per_filter | true if POST /indexes/:indexUid/documents/delete endpoint is called in the aggregated event, otherwise false | false |
# Documents Fetched GET
The Documents Fetched GET event is sent once an hour or when a batch reaches the maximum size of
500kb
.
Property name | Description | Example |
---|---|---|
requests.total_received | Total number of request received in this batch | 325 |
per_document_id | true if GET /indexes/:indexUid/documents/:doc_id endpoint was used in this batch, otherwise false | false |
per_filter | true if GET /indexes/:indexUid/documents endpoint was used with a filter in this batch, otherwise false | false |
pagination.max_limit | Highest value given for the limit parameter in this batch | 60 |
pagination.max_offset | Highest value given for the offset parameter in this batch | 1000 |
# Documents Fetched POST
The Documents Fetched POST event is sent once an hour or when a batch reaches the maximum size of
500kb
.
Property name | Description | Example |
---|---|---|
requests.total_received | Total number of request received in this batch | 325 |
per_document_id | false | false |
per_filter | true if POST /indexes/:indexUid/documents/fetch endpoint was used with a filter in this batch, otherwise false | false |
pagination.max_limit | Highest value given for the limit parameter in this batch | 60 |
pagination.max_offset | Highest value given for the offset parameter in this batch | 1000 |
# Settings Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
searchable_attributes.total | Number of searchable attributes. | 3 |
searchable_attributes.with_wildcard | true if * is specified as a searchable attribute, otherwise false . | false |
ranking_rules.words_position | Position of the words ranking rule if any, otherwise null | 1 |
ranking_rules.typo_position | Position of the typo ranking rule if any, otherwise null | 2 |
ranking_rules.proximity_position | Position of the proximity ranking rule if any, otherwise null | 3 |
ranking_rules.attribute_position | Position of the attribute ranking rule if any, otherwise null | 4 |
ranking_rules.sort_position | Position of the sort ranking rule if any, otherwise null . | 5 |
ranking_rules.exactness_position | Position of the exactness ranking rule if any, otherwise null . | 6 |
ranking_rules.values | A string representing the ranking rules without the custom asc-desc rules. | "words, typo, attribute, sort, exactness" |
sortable_attributes.total | Number of sortable attributes. | 3 |
sortable_attributes.has_geo | Indicate if _geo is set as a sortable attribute. | false |
filterable_attributes.total | Number of filterable attributes. | 3 |
filterable_attributes.has_geo | Indicate if _geo is set as a filterable attribute. | false |
typo_tolerance.enabled | Whether the typo tolerance is enabled. | true |
typo_tolerance.disable_on_attributes | true if at least one value is defined for disableOnAttributes property. | false |
typo_tolerance.disable_on_words | true if at least one value is defined for disableOnWords property. | false |
typo_tolerance.min_word_size_for_typos.one_typo | The defined value for minWordSizeForTypos.oneTypo property. | 5 |
typo_tolerance.min_word_size_for_typos.two_typos | The defined value for minWordSizeForTypos.twoTypos property. | 9 |
pagination.max_total_hits | The defined value for pagination.maxTotalHits property | 1000 |
faceting.max_values_per_facet | The defined value for faceting.maxValuesPerFacet property | 100 |
faceting.sort_facet_values_by_star_count | Whether the user set all fields to be sort by count | true |
faceting.sort_facet_values_by_total | The number of different values that were set | 10 |
distinct_attribute.set | true if a field name is specified, otherwise false . | false |
proximity_precision.set | true the setting has been manually set, otherwise false . | false |
proximity_precision.value | byWord or byAttribute if the setting has been set, otherwise null . | null |
displayed_attributes.total | Number of displayed attributes. | 3 |
displayed_attributes.with_wildcard | true if * is specified as a displayed attribute, otherwise false . | false |
stop_words.total | Number of stop words. | 3 |
separator_tokens.total | Number of separator tokens. | 3 |
non_separator_tokens.total | Number of non separator tokens. | 3 |
dictionary.total | Number of words in the dictionary. | 3 |
synonyms.total | Number of synonyms. | 3 |
# RankingRules Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
ranking_rules.words_position | Position of the words ranking rule if any, otherwise null | 1 |
ranking_rules.typo_position | Position of the typo ranking rule if any, otherwise null | 2 |
ranking_rules.proximity_position | Position of the proximity ranking rule if any, otherwise null | 3 |
ranking_rules.attribute_position | Position of the attribute ranking rule if any, otherwise null | 4 |
ranking_rules.sort_position | Position of the sort ranking rule if any, otherwise null . | 5 |
ranking_rules.exactness_position | Position of the exactness ranking rule if any, otherwise null . | 6 |
ranking_rules.values | A string representing the ranking rules without the custom asc-desc rules. | "words, typo, attribute, sort, exactness" |
# SortableAttributes Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
sortable_attributes.total | Number of sortable attributes. | 3 |
sortable_attributes.has_geo | Indicate if _geo is set as a sortable attribute. | false |
# FilterableAttributes Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
filterable_attributes.total | Number of filterable attributes. | 3 |
filterable_attributes.has_geo | Indicate if _geo is set as a filterable attribute. | false |
# SearchableAttributes Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
searchable_attributes.total | Number of searchable attributes. | 3 |
searchable_attributes.with_wildcard | true if * is specified as a searchable attribute, otherwise false . | false |
# TypoTolerance Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
typo_tolerance.enabled | Whether the typo tolerance is enabled | true |
typo_tolerance.disable_on_attributes | true if at least one value is defined for disableOnAttributes property. | false |
typo_tolerance.disable_on_words | true if at least one value is defined for disableOnWords property. | false |
typo_tolerance.min_word_size_for_typos.one_typo | The defined value for minWordSizeForTypos.oneTypo property. | 5 |
typo_tolerance.min_word_size_for_typos.two_typos | The defined value for minWordSizeForTypos.twoTypos property. | 9 |
# Pagination Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
pagination.max_total_hits | The defined value for maxTotalHits property | 1000 |
# Faceting Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
faceting.max_values_per_facet | The defined value for maxValuesPerFacet property | 100 |
faceting.sort_facet_values_by_star_count | Whether the user set all fields to be sort by count | true |
faceting.sort_facet_values_by_total | The number of different values that were set | 10 |
# DistinctAttribute Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
distinct_attribute.set | true if a field name is specified, otherwise false . | false |
# ProximityPrecision Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
proximity_precision.set | true the setting has been manually set, otherwise false . | false |
proximity_precision.value | byWord or byAttribute if the setting has been set, otherwise null . | byWord |
# DisplayedAttributes Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
displayed_attributes.total | Number of displayed attributes. | 3 |
displayed_attributes.with_wildcard | true if * is specified as a displayed attribute, otherwise false . | false |
# StopWords Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
stop_words.total | Number of stop words. | 3 |
# SeparatorTokens Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
separator_tokens.total | Number of separator tokens. | 3 |
# NonSeparatorTokens Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
non_separator_tokens.total | Number of non separator tokens. | 3 |
# Dictionary Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
dictionary.total | Number of words in the dictionary. | 3 |
# Synonyms Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
synonyms.total | Number of synonyms. | 3 |
# Dump Created
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
# Snapshot Created
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
# Tasks Seen
The Tasks Seen event is sent once an hour or when a batch reaches the maximum size of
500Kb
.
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this endpoint in the aggregated event. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
requests.total_received | The total number of received requests in the aggregated event. | 3480 |
per_task_uid | true if an uid is used to fetch a particular task resource, otherwise false | true |
filtered_by_uid | true if tasks are filtered by the uids query parameter, otherwise false | false |
filtered_by_index_uid | true if tasks are filtered by the indexUids query parameter, otherwise false | false |
filtered_by_type | true if tasks are filtered by the types query parameter, otherwise false | false |
filtered_by_status | true if tasks are filtered by the statuses query parameter, otherwise false | false |
filtered_by_canceled_by | true if tasks are filtered by the canceledBy query parameter, otherwise false | false |
filtered_by_before_enqueued_at | true if tasks are filtered by the beforeEnqueuedAt query parameter, otherwise false | false |
filtered_by_after_enqueued_at | true if tasks are filtered by the afterEnqueuedAt query parameter, otherwise false | false |
filtered_by_before_started_at | true if tasks are filtered by the beforeStartedAt query parameter, otherwise false | false |
filtered_by_after_started_at | true if tasks are filtered by the afterStartedAt query parameter, otherwise false | false |
filtered_by_before_finished_at | true if tasks are filtered by the beforeFinishedAt query parameter, otherwise false | false |
filtered_by_after_finished_at | true if tasks are filtered by the afterFinishedAt query parameter, otherwise false | false |
# Tasks Canceled
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
filtered_by_uid | true if tasks are filtered by the uids query parameter, otherwise false | false |
filtered_by_index_uid | true if tasks are filtered by the indexUids query parameter, otherwise false | false |
filtered_by_type | true if tasks are filtered by the types query parameter, otherwise false | false |
filtered_by_status | true if tasks are filtered by the statuses query parameter, otherwise false | false |
filtered_by_canceled_by | true if tasks are filtered by the canceledBy query parameter, otherwise false | false |
filtered_by_before_enqueued_at | true if tasks are filtered by the beforeEnqueuedAt query parameter, otherwise false | false |
filtered_by_after_enqueued_at | true if tasks are filtered by the afterEnqueuedAt query parameter, otherwise false | false |
filtered_by_before_started_at | true if tasks are filtered by the beforeStartedAt query parameter, otherwise false | false |
filtered_by_after_started_at | true if tasks are filtered by the afterStartedAt query parameter, otherwise false | false |
filtered_by_before_finished_at | true if tasks are filtered by the beforeFinishedAt query parameter, otherwise false | false |
filtered_by_after_finished_at | true if tasks are filtered by the afterFinishedAt query parameter, otherwise false | false |
# Tasks Deleted
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
filtered_by_uid | true if tasks are filtered by the uids query parameter, otherwise false | false |
filtered_by_index_uid | true if tasks are filtered by the indexUids query parameter, otherwise false | false |
filtered_by_type | true if tasks are filtered by the types query parameter, otherwise false | false |
filtered_by_status | true if tasks are filtered by the statuses query parameter, otherwise false | false |
filtered_by_canceled_by | true if tasks are filtered by the canceledBy query parameter, otherwise false | false |
filtered_by_before_enqueued_at | true if tasks are filtered by the beforeEnqueuedAt query parameter, otherwise false | false |
filtered_by_after_enqueued_at | true if tasks are filtered by the afterEnqueuedAt query parameter, otherwise false | false |
filtered_by_before_started_at | true if tasks are filtered by the beforeStartedAt query parameter, otherwise false | false |
filtered_by_after_started_at | true if tasks are filtered by the afterStartedAt query parameter, otherwise false | false |
filtered_by_before_finished_at | true if tasks are filtered by the beforeFinishedAt query parameter, otherwise false | false |
filtered_by_after_finished_at | true if tasks are filtered by the afterFinishedAt query parameter, otherwise false | false |
# Stats Seen
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
per_index_uid | true if an uid is used to fetch an index stat resource, otherwise false | true |
# Health Seen
The Health Seen event is sent once an hour or when a batch reaches the maximum size of
500kb
.
Property name | Description | Example |
---|---|---|
user_agent | Represents all the user-agents encountered on this endpoint in the aggregated event. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
requests.total_received | The total number of received requests in the aggregated event. | 3480 |
# Version Seen
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
# Experimental features Seen
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
# Experimental features Updated
Property name | Description | Example |
---|---|---|
user_agent | Represents the user-agent encountered on this call. | ["Meilisearch Ruby (v2.1)", "Ruby (3.0)"] |
vector_store | Whether the vector store feature is enabled. | true |
# User-interface
Analytics are enabled by default while leaving the option for users to disable it with the --no-analytics
option.
Message displayed on the CLI at launch if analytics are enabled
Thank you for using MeiliSearch!
We collect anonymized analytics to improve our product and your experience. To learn more, including how to turn off analytics, visit our dedicated documentation page: https://docs.meilisearch.com/learn/what_is_meilisearch/telemetry.html.
Anonymous telemetry: "Enabled"
Instance UID: ":uidGeneratedAtFirstLaunch"
Message displayed on the CLI at launch if analytics are disabled after being activated
The unique identifier of the instance remains displayed even if analytics are disabled so that it does not reactivate the analytics to obtain it after having stopped it. The user can still ask us to remove the data previously collected by giving us his Instance UID
.
Thank you for using MeiliSearch!
Anonymous telemetry: "Disabled"
Instance UID: ":uidGeneratedAtFirstLaunch"
Message displayed on the CLI at launch if analytics are disabled at first launch
Thank you for using MeiliSearch!
Anonymous telemetry: "Disabled"
# 2. Technical Aspects
# I. Technical Details
# User-Agent case
The User-Agent
header is tracked on the events listed below. Our official SDKs/integrations should always contain MeiliSearch
in their names.
Each endpoint API tracked sends the User-Agent
as a user_agent
event property as an array. If several values are contained in the User-Agent
header, they are split by the ;
character.
# X-Meilisearch-Client
Header
Some browser engines prevent overloading the User-Agent header. To track the calls made by some clients concerned by this fact, e.g. the JavaScript SDK, it is possible to use the X-Meilisearch-Client
custom header.
If the X-Meilisearch-Client
is encountered, it overrides the presence of the User-Agent
header.
# Telemetry Endpoint
Telemetric data are sent to the domain telemetry.meilisearch.com
which then redirects it to Segment.
This transit domain allows us to change the telemetry collection solution in the future without impacting older versions of Meilisearch.
# Identifying MeiliSearch installation
To identify instances, we generate a unique identifier at first launch if analytics are not disabled.
- This unique identifier is inserted in the data.ms folder to be kept in case of version upgrades.
- A file named following the given pattern
:MeiliSearchData.msPath-:instanceUid
is generated in aMeiliSearch
folder to recover an identifier in case of corruption of the data.ms folder, causing it to be deleted and recreated. ThisMeiliSearch
folder is created in theconfig_dir
of each platform.
Directory | Windows | Linux/*BSD | macOS |
---|---|---|---|
config_dir | %APPDATA% (C:\Users%USERNAME%\AppData\Roaming) | $XDG_CONFIG_HOME (~/.config) | ~/Library/Application Support |
# Segment Identify Call
The identify
method of Segment permits identifying an instance by sending a unique identifier. It groups the information of a MeiliSearch binary such as system
, stats
, and general properties related below in this specification.
The segment identify call is only sent after the first hour if the instance is still running. At the first launch, MeiliSearch sends a Launched
event on an instance ID equal to total_launch
in order to avoid tracking instances usage for nothing when they could be shut down and never restarted.
# Segment Track Call
The track
calls of Segment allow tracking the events passed on the instance.
# Batching
A batch is sent every hour or when it reaches the maximum size of 500Kb
to avoid sending analytics in real-time and preserve network exchanges.
This batch contains an identify payload and all tracked events that occurred during this hour.
# Logging
Errors occurring when sending metrics to Segment should be silent. In general, the impact of data collection should be minimized as much as possible concerning performance and be entirely transparent for the user during its use.
# Debug build
In debug build, no analytics are collected.
# 3. Future possibilities
n/a