Releases: meilisearch/meilisearch-dart
v0.16.0 🎯
This version introduces features released on Meilisearch v1.7.0 🎉
Check out the changelog of Meilisearch v1.7.0 for more information on the changes.
⚠️ Breaking changes
scoreDetails
feature is not experimental anymore. You can directly useshowRankingScoreDetails
during a search without activating the experimental feature 🎉
🚀 Enhancements
- Add text separators (#379) @ahmednfwela
⚙️ Maintenance/misc
- Create code samples from code, a.k.a. code excerpts (#358) @ahmednfwela
- Update dart version and checkout (#367) @brunoocasali
- fix ci steps (#378) @ahmednfwela
- docs: Add readme section about dio (#380) @ahmednfwela
v0.15.0 🎯
Checkout the full CHANGELOG here: https://github.com/meilisearch/meilisearch-dart/blob/main/CHANGELOG.md
⚠️ Breaking changes
- feat(settings): Add sortFacetValuesBy (#351) @ahmednfwela
- Add Result container (#350) @ahmednfwela
🚀 Enhancements
- EXPERIMENTAL: Add vector store (#335, #350) @ahmednfwela
- EXPERIMENTAL: Display ranking details at search (#338, #350) @ahmednfwela
- support /tasks total (#343) @ahmednfwela
- added attributesToSearchOn (#342) @ahmednfwela
- Facet search (#344) @ahmednfwela
- feat(settings): Add sortFacetValuesBy (#351) @ahmednfwela
Thanks again to @ahmednfwela, @brunoocasali, @curquiza, @justkahdri, @meili-bors[bot] ! 🎉
v0.14.0 🎯
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.
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 aDeleteDocumentsQuery
, which could contain the filter or theids
(aka old behavior). #318 @ahmednfwela⚠️ You must configure the attributes you want to filter using theMeiliSearchIndex.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 theDocumentsQuery
. When a query with afilter
is sent togetDocuments(params: DocumentsQuery)
it will filter the documents like thesearch
method. See the docs on how to use filters. #318 @ahmednfwela⚠️ You must configure the attributes you want to filter using theMeiliSearchIndex.filterableAttributes()
.
⚠️ Remember to update your Meilisearch server to v1.2.0 or newer before adopting it. -
MeiliSearchIndex.search
now takes aString query
and aSearchQuery
object as the only inputs. #310 @ahmednfwela- Replace any occurrence of search
index.search('xyz', ....)
withindex.search('xyz', SearchQuery(....))
- await client.index('books').search('query', sort: [], filter: ...); + await client.index('books').search('query', SearchQuery(sort: [], filter: ...));
- Replace any occurrence of search
-
Meili.geoBoundingBox
andMeili.geoRadius
now take record values to represent thelat
/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 aList<IndexSearchQuery>
instead of aList<SearchQuery>
: #310 @ahmednfwelafinal 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 toDocumentsQuery
. #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 usingfilterExpression
s #310 @ahmednfwela - A new type is introduced
IndexSearchQuery
which extendsSearchQuery
. #310 @ahmednfwela- Added
copyWith
toSearchQuery
andIndexSearchQuery
#310 @ahmednfwela
- Added
Thanks again to @brunoocasali, @ahmednfwela! 🎉
v0.13.0 🎯
⚠️ Breaking changes
- Raise minimum supported Dart runtime SDK to v3.0.0 (#307) @ahmednfwela
💅 Misc
- Add screenshot (#304) @brunoocasali
Thanks again to @ahmednfwela and @brunoocasali! 🎉
v0.12.0 🎯
This version introduces features released on Meilisearch v1.1.0 🎉
Check out the changelog of Meilisearch v1.1.0 for more information on the changes.
⚠️ Breaking changes
- Add proper types for
facetStats
,facetDistributions
, andmatchesPosition
(#296) @ahmednfwela
🚀 Enhancements
- Support for custom CSV delimiter (#295) @ahmednfwela
- Support
_geoBoundingBox
infilterExpression
parameter (#297) @ahmednfwela - Refactor tests and allow concurrency (#299) @ahmednfwela
Thanks again to @ahmednfwela, @brunoocasali, @curquiza! 🎉
v0.11.1 🎯
🐛 Bug Fixes
- Make searchable.dart public available (#290, #289) @ahmednfwela
Thanks again to @ahmednfwela, @brunoocasali ! 🎉
v0.11.0 🎯
⚠️ Breaking changes
- More Improvements for Typed search results (#287) @ahmednfwela
🚀 Enhancements
- Typed search results (#286) @ahmednfwela
Thanks again to @ahmednfwela, @brunoocasali ! 🎉
v0.10.2 🎯
🚀 Enhancements
- Adds support to multi-index search (#279) @ahmednfwela
Thanks again to @ahmednfwela, @brunoocasali ! 🎉
v0.10.1 🎯
🐛 Bug Fixes
- Fixes
Index#getTasks
when trying to modify the existingindexUids
(#274) @ahmednfwela
Thanks again to @ahmednfwela! 🎉
v0.10.0 🎯
🚀 Enhancements
- Add pagination settings methods
Future<Pagination> getPagination()
,Future<Task> resetPagination()
,Future<Task> updatePagination(Pagination pagination)
onIndex
instances. (#264) @ahmednfwela - Add faceting settings methods
Future<Faceting> getFaceting(),
Future resetFaceting(),
Future updateFaceting(Faceting faceting) onIndex
instances. (#265) @ahmednfwela - Add typo tolerance settings methods
Future<TypoTolerance> getTypoTolerance()
,Future<Task> resetTypoTolerance()
,Future<Task> updateTypoTolerance(TypoTolerance typoTolerance)
onIndex
instances. (#263) @ahmednfwela - Add filter-builder style: (#252) @ahmednfwela
- Added
filterExpression
parameter to the search method, which takes aMeiliOperatorExpressionBase
, 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()
toString
, which is equivalent to Meili.attr. - Added extension method
toMeiliValue()
toString
,num
,DateTime
,bool
, which are equivalent toMeili
.value.- Example: This query
index.search('prince', filterExpression: Meili.eq(Meili.attribute('tag'), Meili.value("Tale")));
is the same asindex.search('prince', filter: "tag = Tale")
.
- Example: This query
- Added
- Add
Future<List<Task>> addDocumentsInBatches(List<Map<String, Object?>> documents, { int batchSize = 1000, String? primaryKey })
toIndex
instances. - Add
Future<List<Task>> updateDocumentsInBatches(List<Map<String, Object?>> documents, { int batchSize = 1000, String? primaryKey })
toIndex
instances. - Add support to create documents from
ndJson
andCSV
formats directly fromIndex
withaddDocumentsNdjson
,addDocumentsCsv
,updateDocumentsNdjson
, andupdateDocumentsCsv
methods. (#261, #262) @ahmednfwela - Add support for
Dio
adapter customization withMeiliSearchClient.withCustomDio(url, apiKey: "secret", interceptors: [interceptor])
(e.g: you can use this to inject custom code, support to HTTP/2 and more) (#266) @ahmednfwela
Special thanks to @ahmednfwela 🎉