Meilisearch 1.11
Meilisearch 1.11 透過關鍵改進,包括二元量化,推進了 AI 驅動搜尋的穩定性。此版本還根據用戶回饋增強了聯合搜尋功能。

我們很高興推出 Meilisearch v1.11。在本文中,我們將介紹最重要的變更。如需完整的更新列表,請瀏覽 GitHub 上的更新日誌。
Meilisearch 1.11 也已在 Meilisearch Cloud 上提供 - 立即升級!
實驗性功能:向量資料庫索引效能改進
Meilisearch v1.11 引入了新的嵌入器選項:binaryQuantized
。
二元量化透過使用 1 位元值編碼每個維度來壓縮向量,顯著提升效能,尤其是在具有超過 100 萬個文件和超過 1024 個維度的模型的資料集中。
較小的嵌入 (少於 1024 個維度) 往往會產生較差的結果。當維度較少時,二元向量無法保留足夠的資訊來達到良好的相關性。
啟用此功能會永久更新所有向量,使其僅包含 1 和 -1,這可能會嚴重影響搜尋相關性。此變更不可逆。
在啟用此功能之前,我們建議在開發環境中的較小或重複索引中測試此功能,以評估其對您使用案例的影響。
實驗性功能:AI 驅動的搜尋改進
重大變更
此版本為穩定功能引入了幾項重大變更。
embedder
參數變成強制性
在之前的版本中,如果未指定嵌入器,則在搜尋和類似請求時會自動使用預設嵌入器。從 v1.11 開始,在執行時必須指定 embedder
參數
// Semantic and hybrid search client.index('INDEX_NAME').search( query, { hybrid: { embedder: 'EMBEDDER_NAME' // mandatory as of v1.11 } } ) // Similarity search client.index('INDEX_NAME').searchSimilarDocuments({ id: 'TARGET_DOCUMENT_ID', embedder: 'EMBEDDER_NAME' // mandatory as of v1.11 })
此外,即使是完整向量搜尋 (當使用 vector
而不使用 q
時),也必須包含具有 embedder
的 hybrid
物件。
client.index('INDEX_NAME').search({ vector: [0, 1, 2], hybrid: { embedder: 'EMBEDDER_NAME'// mandatory as of v1.11 } })
當傳遞 vector
而不使用 q
時,現在會忽略非零的 semanticRatio
在 Meilisearch v1.11 之前,當使用vector
和hybrid
參數執行搜尋,但不使用q
時,除非將 hybrid.semanticRatio
設定為 1.0
,否則會發生佔位符關鍵字搜尋。在 v1.11 中,除非將 hybrid.semanticRatio
設定為 0.0
,否則一律會執行語義搜尋。
新增功能和改進
預設 OpenAI 模型更新
預設的OpenAI 模型已從 text-embedding-ada-002
更新為新的 text-embedding-3-small
。此新模型比舊版 ada
模型更具成本效益且更準確,能夠以較低的成本提供更好的效能。
新的嵌入器參數
Meilisearch 1.11 的新 documentTemplateMaxBytes
參數允許在文件的範本文字超出指定位元組限制時截斷它。預設設定為 400 位元組。
此變更具有回溯相容性。現有的嵌入器將保留 400 位元組的預設值,在升級期間不需要重新計算嵌入。新的限制僅適用於修改文件和重新呈現範本時。
改進的文件範本
documentTemplate
中的欄位現在包含 field.is_searchable
屬性。預設的文件範本將篩除空的欄位和不在可搜尋屬性清單中的欄位。新的預設範本僅適用於從 v1.11 開始建立的嵌入器。
// v1.11 default document template {% for field in fields %} {% if field.is_searchable and not field.value == nil %} {{ field.name }}: {{ field.value }} {% endif %} {% endfor %} // v1.10 default document template {% for field in fields %} {{ field.name }}: {{ field.value }} {% endfor %}
聯合搜尋改進:分面分配和統計
Meilisearch v1.11 為聯合搜尋引入了兩個新選項:facetsByIndex
和 mergeFacets
。這些選項可讓您為聯合搜尋結果請求分面分配和統計。
依索引分面資訊
若要擷取每個個別索引的分面分配和統計,請使用 facetsByIndex
選項。
{ "federation": { "facetsByIndex": { "movies": ["title", "id"], "comics": ["title"] } }, "queries": [ { "q": "Batman", "indexUid": "movies" }, { "q": "Batman", "indexUid": "comics" } ] }
回應將包含每個索引的分面分配和統計
{ "facetsByIndex": { "movies": { // Facet distribution for queries on the `movies` index "distribution": { "title": { "Batman returns": 1 }, "id": { "42": 1 } }, // Facet stats for queries on the `movies` index "stats": { "id": { "min": 42, "max": 42 } } }, "comics": { // Facet distribution for queries on the `comics` index "distribution": { "title": { "Batman: the killing joke": 1 } }, // Facet stats for queries on the `comics` index (empty because only numeric values are considered) "stats": {} } } }
合併的分面資訊
若要從單一結果中的所有索引取得分面分配和統計,請同時使用facetsByIndex
和mergeFacets
POST /multi-search { "federation": { "facetsByIndex": { "movies": ["title", "id"], "comics": ["title"] }, "mergeFacets": { "maxValuesPerFacet": 10 } }, "queries": [ { "q": "Batman", "indexUid": "movies" }, { "q": "Batman", "indexUid": "comics" } ] }
回應將包含合併的分面資料
{ "facetDistribution": { "title": { "Batman returns": 1, "Batman: the killing joke": 1 }, "id": { "42": 1 } }, "facetStats": { "id": { "min": 42, "max": 42 } } }
深入了解聯合搜尋及其使用案例。
實驗性功能:新的 STARTS_WITH
篩選運算子
新的 STARTS_WITH
篩選運算子會比對任何以指定字串模式開頭的欄位值
// returns all heroes whose name starts with 'super' "filter": "hero STARTS_WITH super"
這是一項實驗性功能。若要啟用此功能,請使用實驗性功能端點並將 containsFilter
選項設定為 true
。請注意,這也會啟用 CONTAINS
篩選運算子。
透過此GitHub 討論分享您的回饋
貢獻者感謝
我們要衷心感謝為此版本做出貢獻的貢獻者:@iornstein 在Meilisearch 上的協助,以及 @luflow、@tkhshtsh0917 在 charabia 上的工作。
我們還要特別感謝 SDK 維護人員,他們努力讓 Meilisearch 適用於許多語言和架構。
v1.11 的內容到此結束!這些版本資訊僅重點說明最重要的更新。如需完整的清單,請閱讀 Github 上的更新日誌。
使用 Meilisearch Cloud 輕鬆升級。
訂閱我們的每月電子報,隨時掌握 Meilisearch 的最新動態。若想了解更多 Meilisearch 的未來發展方向並參與塑造,請查看我們的路線圖並參與我們的產品討論。
如有其他任何疑問,請加入我們在 Discord 上的開發者社群。