meilisearch 0.18.0 copy "meilisearch: ^0.18.0" to clipboard
meilisearch: ^0.18.0 copied to clipboard

Meilisearch Dart is the Meilisearch API client for Dart and Flutter developers.

0.18.0 #

Breaking Changes: #

No breaking change but addition of new features

  • export API
  • Add ID as a parameter for GetDocuments

0.17.1 #

Breaking Changes: #

0.17.0 #

Breaking Changes: #

  • AI-powered search is now stable. Use it without activating the experimental feature.

0.16.0 #

Breaking Changes: #

  • scoreDetails feature is not experimental anymore. You can directly use showRankingScoreDetails during a search without activating the experimental feature

0.15.0 #

Breaking Changes: #

  • Change members of Faceting to be final, and remove the default values
  • Mark all Searcheable<T> fields in the constructor as required
  • Bug Fix Searcheable<T> had a wrong matchesPosition property, which was moved into MeiliDocumentContainer<T>

Changes: #

  • Add int? total to TasksResults
  • Add attributesToSearchOn to SearchQuery and IndexSearchQuery
  • Add Future<FacetSearchResult> facetSearch(FacetSearchQuery query) to MeiliSearchIndex
  • Add enum FacetingSortTypes
  • Add Map<String, FacetingSortTypes>? sortFacetValuesBy to Faceting
  • [experimental]* Add List? vector to SearchQuery and IndexSearchQuery
  • [experimental]* Add bool? showRankingScoreDetails to SearchQuery and IndexSearchQuery
  • Add bool? showRankingScore to SearchQuery and IndexSearchQuery
  • Add MeiliDocumentContainer<T>
  • Add Map<String, dynamic> src to Searchable which exposes the raw json object returned from the server. Just in case we don't keep up with new meilisearch releases, the user has a way to access new features.

[experimental]* To adopt a experimental change you must opt-in manually

0.14.0 #

Breaking Changes: #

  • Moved indexUid, query from SearchQuery to the new IndexSearchQuery.
  • Changed deleteDocuments signature:
// from:
- Future<Task> deleteDocuments(List<Object> ids)
+ Future<Task> deleteDocuments(DeleteDocumentsQuery query)

// to:
- index.deleteDocuments([456, 4])
+ index.deleteDocuments(DeleteDocumentsQuery(ids: [456, 4]))
  • MeiliSearchIndex.search now takes a String query and a SearchQuery object as the only inputs.
    • Replace any ocurrence of search index.search('xyz', ....) with index.search('xyz', SearchQuery(....))
- await client.index('books').search('query', sort: [], filter: ...);
+ await client.index('books').search('query', SearchQuery(sort: [], filter: ...));
  • Meili.geoBoundingBox and Meili.geoRadius now take record values to represent the lat/lng points:
// Confusing, unclear
- Meili.geoBoundingBox(3,5.3,10,20)
// Not Confusing :)
+ Meili.geoBoundingBox((lat: 3, lng: 5.3), (lat: 10, lng: 20))
// Confusing, unclear
- Meili.geoRadius(3, 5.3, 100)
// Not Confusing :)
+ Meili.geoRadius((lat: 3, lng: 5.3), 100)
  • Change MultiSearchQuery.queries to be a List<IndexSearchQuery> instead of a List<SearchQuery>:
final result = await client.multiSearch(MultiSearchQuery(queries: [
-      SearchQuery(
+      IndexSearchQuery(
          query: "",
          indexUid: index1.uid,
        ),
-    SearchQuery(
+    IndexSearchQuery(
          query: "",
          indexUid: index2.uid,
        ),
];

Changes: #

  • Introduce a new annotation RequiredMeiliServerVersion which documents the version this members were introduced.
  • Introduce filter expressions for IS NULL, IS NOT NULL, IS EMPTY, IS NOT EMPTY.
  • Added filter, filterExpression parameter to DocumentsQuery.
  • Some internal Queryable refactoring to unify its behavior and avoid duplicating the code.
  • Added a workaround for https://github.com/meilisearch/meilisearch/issues/3740 by jsonEncoding attribute names when using filterExpressions
  • A new type is introduced IndexSearchQuery which extends SearchQuery.
    • Added copyWith to SearchQuery and IndexSearchQuery

0.13.0 #

Breaking Changes #

  • The minimum supported Dart runtime is now 3.0.0.

0.12.0 #

Breaking Changes: #

  • SwapIndex class has a new assert to require at least two items in the this.indexes attribute.
  • Introduces new classes: FacetStat, MatchPosition.
  • Change Searchable<T> to have proper types:
- final Object? facetDistribution;
+ final Map<String, Map<String, int>>? facetDistribution;
- final Object? matchesPosition;
+ final Map<String, List<MatchPosition>>? matchesPosition;
+ final Map<String, FacetStat>? facetStats;

Changes: #

  • Add csvDelimiter parameter to addDocumentsCsv, addDocumentsCsvInBatches, updateDocumentsCsv, updateDocumentsCsvInBatches MeiliSearchIndex methods.
  • Add support for _geoBoundingBox in filterExpression

0.11.1 #

Bug Fixes: #

  • Searchable class was not being public exported.

0.11.0 #

Breaking Changes: #

  • Changes Searcheable, SearchResult, PaginatedSearchResult signatures to be generic Searcheable<T>, SearchResult<T>, PaginatedSearchResult<T>
  • Adds a new map<TOther> method to Searcheable<T> and its subclasses to map the search result to a different type.
  • All search operations produce Searcheable<Map<String, dynamic>> by default, which can be mapped to other types using the map<TOther> method.
  • Revert some of the Object? types that were changed from dynamic:
    • MeiliSearchClient class Future<Map<String, dynamic>> health();
    • HttpRequest class Map<String, dynamic> headers();
    • MeiliSearchIndex class Future<Searcheable<Map<String, dynamic>>> search(...);
    • MeiliSearchIndex classFuture<Map<String, dynamic>?> getDocument(Object id, {List<String> fields});
    • MeiliSearchIndex class Future<Result<Map<String, dynamic>>> getDocuments({DocumentsQuery? params});
  • Searcheable<T>.hits is non-nullable now, and defaults to const []

Changes: #

  • Introduced new extension methods to help consumers cast Future<Searchable<T>> to the corresponding type:
final result = await index.search('').then((value) => (value as SearchResult<Map<String, dynamic>>).map(BookDto.fromMap));
final resultPaginated = await index.search('').then((value) => (value as PaginatedSearchResult<Map<String, dynamic>>).map(BookDto.fromMap));

to:

final result = await index.search('').asSearchResult().map(BookDto.fromMap);
final resultPaginated = await index.search('').asPaginatedResult().map(BookDto.fromMap);

0.10.2 #

Changes: #

  • Introduce MultiSearchQuery class to handle search requests.
  • Add Future<MultiSearchResult> multiSearch(MultiSearchQuery requests); to MeiliSearchClient.

0.10.1 #

Bug Fixes: #

  • Fix the behavior of client.index.getTasks() where the indexUid was not changing correctly after consecutive calls.

0.10.0 #

Changes: #

  • Add pagination settings methods Future<Pagination> getPagination(), Future<Task> resetPagination(), Future<Task> updatePagination(Pagination pagination) on Index instances.

  • Add faceting settings methods Future<Faceting> getFaceting(), Future<Task> resetFaceting(), Future<Task> updateFaceting(Faceting faceting) on Index instances.

  • Add typo tolerance settings methods Future<TypoTolerance> getTypoTolerance(), Future<Task> resetTypoTolerance(), Future<Task> updateTypoTolerance(TypoTolerance typoTolerance) on Index instances.

  • Add filter-builder style:

    • Added filterExpression parameter to the search method, which takes a MeiliOperatorExpressionBase, you can only use the new parameter or the regular filter parameter, but not both. If both are provided, filter parameter will take priority.

    • Added new facade class Meili which contains static methods to help create filter expressions.

    • Added extension method toMeiliAttribute() to String, which is equivalent to Meili.attr.

    • Added extension method toMeiliValue() to String,num,DateTime,bool, which are equivalent to Meili.value.

    • example: This query await index.search('prince', filterExpression: Meili.eq(Meili.attribute('tag'), Meili.value("Tale"))); is the same as await index.search('prince', filter: "tag = Tale").

  • Add Future<List<Task>> addDocumentsInBatches(List<Map<String, Object?>> documents, { int batchSize = 1000, String? primaryKey }) to Index instances.

  • Add Future<List<Task>> updateDocumentsInBatches(List<Map<String, Object?>> documents, { int batchSize = 1000, String? primaryKey }) to Index instances.

  • Add support to create documents from ndJson and CSV formats directly from Index with addDocumentsNdjson, addDocumentsCsv, updateDocumentsNdjson, and updateDocumentsCsv methods.

  • Add support for Dio adapter customization with MeiliSearchClient.withCustomDio(url, apiKey: "secret", interceptors: [interceptor]) (e.g: you can use this to inject custom code, support to HTTP/2 and more)

Special thanks to @ahmednfwela 🎉

0.9.1 #

  • [web] Fix a bug that affected the web platform regarding the override of User-Agent. Now the header used to send the client name information is the X-Meilisearch-Client one.

0.9.0 #

Breaking Changes: #

  • The minimum supported Dart runtime is now 2.15.

  • Updated dio dependency from v4 to v5.

  • MeiliSearchClientImpl.connectTimeout, MeiliSearchClient.connectTimeout is now a Duration instead of int, and the default is Duration(seconds: 5).

  • From Future<Response<T>> getMethod<T>(String path, {Map<String, dynamic>? queryParameters,}); to Future<Response<T>> getMethod<T>(String path, { Object? data, Map<String, Object?>? queryParameters })

  • Reduce usage of dynamic keyword by replacing it with Object?.

    • Queryable.toQuery was promoted from Map<String, dynamic> to Map<String, Object> due to the use of removeEmptyOrNulls
    • Result<T> had argument type T that was never used, so it was changed from List<dynamic> results; to List<T> results; and introduced a new helper function Result<TTarget> map<TTarget>(TTarget Function(T item) converter).
    • getDocuments changed signature from Future<Result> getDocuments({DocumentsQuery? params}); to Future<Result<Map<String, Object?>>> getDocuments({DocumentsQuery? params});, and now end users can call .map on the result to use their own DTO classes (using fromJson for example).
    • Future<Task> deleteDocuments(List<dynamic> ids); to Future<Task> deleteDocuments(List<Object> ids); since deleting a null id was an illegal operation.
    • Future<Task> deleteDocument(dynamic id); to Future<Task> deleteDocument(Object id);
    • Future<Task> updateDocuments(List<Map<String, dynamic>> documents, {String? primaryKey}); to Future<Task> updateDocuments(List<Map<String, Object?>> documents, {String? primaryKey});
    • Future<Task> addDocuments(List<Map<String, dynamic>> documents, {String? primaryKey}); to Future<Task> addDocuments(List<Map<String, Object?>> documents, {String? primaryKey});
    • Future<Task> deleteDocument(dynamic id); to Future<Task> deleteDocument(Object id);
    • Future<Map<String, dynamic>?> getDocument(dynamic id, {List<String> fields}); to Future<Map<String, Object?>?> getDocument(Object id, {List<String> fields});
    • Future<Searcheable> search(String? query, {...dynamic filter...}) is now a Object? filter
    • Future<Map<String, dynamic>> getRawIndex(String uid); to Future<Map<String, Object?>> getRawIndex(String uid);
    • Future<Map<String, dynamic>> health(); to Future<Map<String, Object?>> health();
    • String generateTenantToken(String uid, dynamic searchRules,... to String generateTenantToken(String uid, Object? searchRules,...
    • class TasksResults<T> { ... } to class TasksResults { ... }

Changes #

  • Fix a bug in the creation of keys with an existing uid.

0.8.0 #

Breaking changes #

  • TasksQuery#canceledBy field is now a List<int> and not an int? anymore.
  • Add indexUid to Task

Changes #

  • Expose these classes:
    • PaginatedSearchResult
    • DocumentsQuery
    • TasksQuery
    • CancelTasksQuery
    • DeleteTasksQuery
    • KeysTasksQuery
    • IndexesTasksQuery
    • MatchingStrategy enum
    • MeiliSearchApiException and CommunicationException
    • Task and TaskError
    • SwapIndex

0.7.1 #

Changes #

  • Remove dart:mirrors dependency. Enable flutter and web platforms again.

0.7.0 [deprecated] #

Changes #

⚠️ Don't use this version if you're using with Flutter or Web. It is not supported due to a mistake in the implementation of the Queryable class. Please use the next available version.

  • SearchResult now is returned from search requests when is a non-exhaustive pagination request. A instance of PaginatedSearchResult is returned when the request was made with finite pagination.
  • Add Future<Task> swapIndexes(List<SwapIndex> swaps) method to swap indexes.
  • Add Future<Task> cancelTasks({CancelTasksQuery? params}) to cancel tasks based on the input query params.
    • CancelTasksQuery has these fields:
      • int? next;
      • DateTime? beforeEnqueuedAt;
      • DateTime? afterEnqueuedAt;
      • DateTime? beforeStartedAt;
      • DateTime? afterStartedAt;
      • DateTime? beforeFinishedAt;
      • DateTime? afterFinishedAt;
      • List<int> uids;
      • List<String> statuses;
      • List<String> types;
      • List<String> indexUids;
  • Add Future<Task> deleteTasks({DeleteTasksQuery? params}) delete old processed tasks based on the input query params.
    • DeleteTasksQuery has these fields:
      • int? next;
      • DateTime? beforeEnqueuedAt;
      • DateTime? afterEnqueuedAt;
      • DateTime? beforeStartedAt;
      • DateTime? afterStartedAt;
      • DateTime? beforeFinishedAt;
      • DateTime? afterFinishedAt;
      • List<int> canceledBy;
      • List<int> uids;
      • List<String> statuses;
      • List<String> types;
      • List<String> indexUids;

Breaking changes #

  • TasksQuery has new fields, and some of them were renamed:
    • those fields were added:
      • int? canceledBy;
      • DateTime? beforeEnqueuedAt;
      • DateTime? afterEnqueuedAt;
      • DateTime? beforeStartedAt;
      • DateTime? afterStartedAt;
      • DateTime? beforeFinishedAt;
      • DateTime? afterFinishedAt;
      • List<int> uids;
    • those were renamed:
      • List<String> statuses; from List<String> status;
      • List<String> types; from List<String> type;
      • List<String> indexUids; from List<String> indexUid;

0.6.1 #

Changes #

  • Add support to matchingStrategy in the search MeiliSearchIndex#search.

0.6.0 #

This version makes this package compatible with Meilisearch v0.28.0 and newer

Breaking changes #

  • MeiliSearchClient#getDumpStatus method was removed.
  • MeiliSearchClient#getIndexes method now return a object type Result<MeiliSearchIndex>.
  • TaskInfo, TaskImpl, ClientTaskImpl are now just Task.
    • The method getStatus was removed in the new class.
  • MeiliSearchClient#generateTenantToken now require a String uid which is the uid of the Key instance used to sign the token.
  • MeiliSearchClient#createDump now responds with Task.
  • MeiliSearchClient#getKeys method now return a object type Future<Result<Key>>.
  • MeiliSearchClient#updateKey now can just update a description and/or name.
  • MeiliSearchClient#getTasks method now return a object type Future<TasksResults>.
  • MeiliSearchIndex#getTasks method now return a object type Future<TasksResults>.
  • MeiliSearchIndex#search facetsDistribution is now facets
  • MeiliSearchIndex#search matches is now showMatchesPosition
  • MeiliSearchIndex#getDocuments method now return a object type Future<Result>.
  • MeiliSearchIndex#getDocuments method now accepts a object as a parameter and offset, limit, attributesToRetrieve were not longer accepted.
  • nbHits, exhaustiveNbHits, facetsDistribution, exhaustiveFacetsCount were removed from SearchResult.
  • Remove unused generic T in MeiliSearchClient#search method

Changes #

  • MeiliSearchClient#getIndexes accepts a object IndexesQuery to filter and paginate the results.
  • MeiliSearchClient#getKeys accepts a object KeysQuery to filter and paginate the results.
  • MeiliSearchClient#getKey accepts both a Key#uid or Key#key value.
  • MeiliSearchClient#getTasks accepts a object TasksQuery to filter and paginate the results.
  • MeiliSearchIndex#getTasks accepts a object TasksQuery to filter and paginate the results.
  • MeiliSearchClient#createKey can specify a uid (optionally) to create a new Key.
  • MeiliSearchIndex#getDocuments accepts a object DocumentsQuery to filter and paginate the results.
  • Key has now a name and uid string fields.
  • MeiliSearchIndex#getDocument accepts a list of fields to reduce the final payload.
  • estimatedTotalHits, facetDistribution were added to SearchResult
  • Sending a invalid uid or apiKey will raise InvalidApiKeyException in the generateTenantToken.

0.5.3 #

This version makes this package compatible with Meilisearch v0.27.0 and newer

Changes #

  • Ensure nested field support (#157) @brunoocasali
  • Add highlightPreTag, highlightPostTag, cropMarker, parameters in the search request (#156) @brunoocasali
  • Fix syntax issue in the README (#162) @mafreud

0.5.2 #

    • Added new method generateTenantToken() as a result of the addition of the multi-tenant functionality. This method creates a JWT tenant token that will allow the user to have multi-tenant indexes and thus restrict access to documents based on the end-user making the search request. (#139) @brunoocasali

0.5.1 #

  • Add User-Agent header to have analytics in every http request (#129) @brunoocasali

0.5.0 #

This version makes this package compatible with Meilisearch v0.25.0 and newer

Changes #

  • Add method to responds with raw information from API client.getRawIndex (#124) @brunoocasali
  • Run a pub upgrade in dependencies (#128) @brunoocasali
  • Add support to keys (according to v0.25.0 spec) more (#121) @brunoocasali
    • Create a new resource class Key to represent keys
    • Create methods to support keys:
      • client.getKeys
      • client.getKey
      • client.createKey
      • client.updateKey
      • client.deleteKey
  • Add PATCH method support (#121) @brunoocasali
  • Updates regarding code samples:
    • setting guide sortable (#117) @alallema
    • added all the changed methods based on the new version v0.25.0 (#126) @brunoocasali

Breaking changes #

  • Remove getOrCreate from MeiliSearchClient (#119) @brunoocasali
  • Rename PendingUpdate to TaskInfo (#123) @brunoocasali
  • Meilisearch v0.25.0 uses Authorization header instead of X-Meili-API-Key (#121) @brunoocasali
  • Multiple naming changes regarding the v0.25.0 upgrade (#119, #120, #125, #127) @brunoocasali:
    • client.getUpdateStatus to client.getTask
    • client.getAllUpdateStatus to client.getTasks
    • client.getKeys responds with a Future<List<Key>> not Future<Map<String, String>>
    • index.update, index.delete, client.createIndex, client.deleteIndex and client.updateIndex now responds with Future<TaskInfo>
    • index.getAllUpdateStatus to index.getTasks
    • index.getUpdateStatus to index.getTask

0.4.0 #

  • Rename errorCode, errorType and errorLink into code, type and link in the error handler (#110) @curquiza
  • Changes related to the next Meilisearch release (v0.24.0) (#109)

0.3.2 #

  • Add json content type by default as header to make it compatible with Meilisearch v0.23.0 (#89) @curquiza

0.3.1 #

  • Fixed cropLength type (#79) @sanders41
  • Fix distinctAttribute in settings (#77) @sanders41
  • Changes related to the next Meilisearch release (v0.22.0) (#82)
    • Added sortable attributes (#83) @sanders41
    • Add sort parameter (#84) @curquiza

0.3.0 #

This version makes this package compatible with Meilisearch v0.21.0

Changes #

  • Update PendingUpdateX (#62) @alallema
  • Adding option to specify a connectTimeout duration (#59) @sanders41
  • Adding getKeys method (#66) @sanders41
  • Adding dump methods (#67) @sanders41
  • Adding getVersion method (#68) @sanders41
  • Adding sub-settings methods (#70) @sanders41
  • Adding index.getStats and client.getStats methods (#69) @sanders41
  • Adding getAllUpdateStatus and getUpdateStatus methods (#73) @sanders41

Breaking changes #

  • Rename attributes_for_faceting into filterable_attributes (#61) @alallema
  • Rename Filters into Filter (#63) @alallema
  • Rename attributes for faceting into filterable attributes (#71) @curquiza
  • Changes related to the next Meilisearch release (v0.21.0) (#40)

0.2.1 #

  • Changes due to the implicit index creation (#48) @alallema

0.2.0 #

Changes #

  • Add health method (#38) @alallema

Breaking changes #

  • Null-safety migration (#42) @TheMisir
  • Add an error handler (#36) @curquiza

0.1.3 #

  • Upgrade dependencies

0.1.2 #

  • Fix: Rename facetDistribution into facetsDistribution

0.1.1 #

  • Add example project

0.1.0+1 #

  • Fix image in pub.dev listing

0.1.0 #

  • Initial stable release
  • Write unit tests

0.0.3-pre #

  • Implemented search endpoints
  • Implemented settings endpoints
  • Implemented document endpoints

0.0.1-pre #

  • Initial pre-release
65
likes
140
points
4.18k
downloads
screenshot

Documentation

API reference

Publisher

verified publishermeilisearch.com

Weekly Downloads

Meilisearch Dart is the Meilisearch API client for Dart and Flutter developers.

Homepage
Repository (GitHub)
View/report issues
Contributing

License

MIT (license)

Dependencies

collection, crypto, dio, json_annotation, meta

More

Packages that depend on meilisearch