Skip to content

v0.14.0 🎯

Compare
Choose a tag to compare
@meili-bot meili-bot released this 06 Jun 19:26
· 194 commits to refs/heads/main since this release
0a33f19

This version introduces features released on Meilisearch v1.2.0 🎉
Check out the changelog of Meilisearch v1.2.0 for more information on the changes.
⚠️ If you want to adopt new features of this release, update the Meilisearch server to the according version.

Check the complete CHANGELOG here: https://github.com/meilisearch/meilisearch-dart/blob/main/CHANGELOG.md

💥 Breaking changes

  • The method deleteDocuments() now supports a different behavior. This method now takes a DeleteDocumentsQuery, which could contain the filter or the ids (aka old behavior). #318 @ahmednfwela

    ⚠️ You must configure the attributes you want to filter using the MeiliSearchIndex.filterableAttributes().
    ⚠️ Remember to update your Meilisearch server to v1.2.0 or newer before adopting it.

    Still, even being supported, the ability to receive only a list of ids is deprecated, and it will be removed soon.

    // from:
    - Future<Task> deleteDocuments(List<Object> ids)
    + Future<Task> deleteDocuments(DeleteDocumentsQuery query)
    
    // to:
    - index.deleteDocuments([456, 4])
    + index.deleteDocuments(DeleteDocumentsQuery(ids: [456, 4]))
  • Add the ability to set filter in the DocumentsQuery. When a query with a filter is sent to getDocuments(params: DocumentsQuery) it will filter the documents like the search method. See the docs on how to use filters. #318 @ahmednfwela

    ⚠️ You must configure the attributes you want to filter using the MeiliSearchIndex.filterableAttributes().
    ⚠️ Remember to update your Meilisearch server to v1.2.0 or newer before adopting it.

  • MeiliSearchIndex.search now takes a String query and a SearchQuery object as the only inputs. #310 @ahmednfwela

    • Replace any occurrence 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: #310 @ahmednfwela

    // 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>: #310 @ahmednfwela

    final result = await client.multiSearch(MultiSearchQuery(queries: [
    -      SearchQuery(
    +      IndexSearchQuery(
              query: "",
              indexUid: index1.uid,
            ),
    -    SearchQuery(
    +    IndexSearchQuery(
              query: "",
              indexUid: index2.uid,
            ),
    ];

Enhancements:

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

Thanks again to @brunoocasali, @ahmednfwela! 🎉