v1.3 版本的新功能有哪些?
v1.3 引入了許多令人興奮的功能,包括向量搜尋、排名分數詳情、搜尋篩選值以及在查詢時可搜尋的欄位。

讓我們來看看 Meilisearch 最新更新中的一些最重要的變化。我們將在本篇文章中介紹主要變化,但您也可以在 GitHub 上查看完整變更日誌。
v1.3 現在已在Meilisearch Cloud上提供,包括所有實驗性功能。一鍵升級您的 Meilisearch 實例,而不會停機。
實驗性功能:向量搜尋
正在使用 LangChain 嗎?您現在可以使用 Meilisearch 向量儲存區 來利用強大的搜尋功能!
我們很高興推出向量儲存!現在,您可以使用向量嵌入(數據的數字表示)來索引和搜尋文件。對於此功能的第一個迭代,您需要使用外部工具,例如 Hugging Face、Cohere 或 OpenAI 來建立這些嵌入。查看[公告文章](/blog/vector-search-announcement/),以了解此功能的廣泛可能性和潛在應用。
此功能為實驗性功能,您可以使用新的experimental-features 端點來啟用它。
若要根據文件的向量鄰近度來搜尋文件,請確保它們包含 _vectors
欄位
curl -X POST -H 'content-type: application/json' 'localhost:7700/indexes/songs/documents' --data-binary '[ { "id": 0, "_vectors": [0, 0.8, -0.2], "title": "Across The Universe" }, { "id": 1, "_vectors": [1, -0.2, 0], "title": "All Things Must Pass" }, { "id": 2, "_vectors": [[0.5, 3, 1], [-0.2, 4, 6]], "title": "And Your Bird Can Sing" } ]'
儲存後,您可以結合使用新的 vector
搜尋參數與search和multi-search路由,來搜尋向量化文件。
curl -X POST -H 'content-type: application/json' 'localhost:7700/indexes/songs/search' --data-binary '{ "vector": [0, 1, 2] }'
👉 請注意,您需要使用第三方工具在查詢中產生向量。
傳回的文件包含一個 _semanticScore
欄位,表示每個文件與查詢的語義相似性或相關性。
{ "hits": [ { "id": 0, "_vectors": [0, 0.8, -0.2], "title": "Across The Universe", "_semanticScore": 0.6754 }, { "id": 1, "_vectors": [1, -0.2, 0], "title": "All Things Must Pass", "_semanticScore": 0.7546 }, { "id": 2, "_vectors": [[0.5, 3, 1], [-0.2, 4, 6]], "title": "And Your Bird Can Sing", "_semanticScore": 0.78 } ], "query": "", "vector": [0, 1, 2], "processingTimeMs": 0, "limit": 20, "offset": 0, "estimatedTotalHits": 2 }
此功能為實驗性功能,我們需要您的幫助來改進它!在此 GitHub 討論中分享您的意見回饋。
新功能:在搜尋時顯示排名分數
使用新的 showRankingScore
搜尋參數來查看每個文件的相關性排名分數
curl -X POST 'https://127.0.0.1:7700/indexes/movies/search' -H 'Content-Type: application/json' --data-binary '{ "q": "Batman Returns", "showRankingScore": true }'
回應中的每個文件都將包含一個 _rankingScore
屬性,表示介於 0 和 1 之間的分數
"_rankingScore": 0.8575757575757575,
_rankingScore
越高,表示文件越相關。
實驗性功能:排名分數詳情
對於傳回的每個文件,Meilisearch 都會提供每個排名規則的排名分數詳情。此功能是 [社群參與如何豐富 Meilisearch 設計過程](/blog/from-ranking-to-scoring/) 的一個完美範例。
此功能為實驗性功能,您可以使用新的experimental-features 端點來啟用它。
將 showRankingScoreDetails
搜尋參數設定為 true
以查看排名分數詳情
curl -X POST 'https://127.0.0.1:7700/indexes/movies/search' -H 'Content-Type: application/json' --data-binary '{ "q": "Batman Returns", "showRankingScoreDetails": true }'
回應應包含每個規則的相關性分數
"_rankingScoreDetails": { "words": { "order": 0, "matchingWords": 1, "maxMatchingWords": 1, "score": 1.0 }, "typo": { "order": 1, "typoCount": 0, "maxTypoCount": 1, "score": 1.0 }, "proximity": { "order": 2, "score": 1.0 }, "attribute": { "order": 3, "attributesRankingOrder": 0.8, "attributesQueryWordOrder": 0.6363636363636364, "score": 0.7272727272727273 }, "exactness": { "order": 4, "matchType": "noExactMatch", "score": 0.3333333333333333 } }
此功能為實驗性功能。您可以在此 GitHub 討論中分享您的意見回饋,以幫助我們改進它。
新功能:搜尋篩選值
定義您的可篩選屬性後,您可以使用新的端點 POST /indexes/{index}/facet-search
來搜尋篩選值。
curl -X POST 'https://127.0.0.1:7700/indexes/movies/facet-search' -H 'Content-Type: application/json' --data-binary '{ "facetName": "genres", "facetQuery": "a" }'
由於篩選搜尋具有容錯性並支援字首搜尋,因此上述查詢將傳回以下結果
{ "facetHits": [ { "value": "Action", "count": 5403 }, { "value": "Adventure", "count": 3020 }, { "value": "Animation", "count": 1969 } ], "facetQuery": "a", "processingTimeMs": 0 }
若要測試此功能,請查看我們更新的電子商務範例。
新功能:依計數排序篩選值
預設情況下,篩選器會依遞增字母數字順序排序。現在,您可以根據包含每個篩選值的相符文件數,以遞減順序排序篩選值。
若要依計數排序篩選器,您可以使用 篩選索引設定中的新 sortFacetValuesBy
屬性。
若要修改所有篩選器的順序,您可以使用星號 (*) 萬用字元
curl -X PATCH 'https://127.0.0.1:7700/indexes/movies/settings/faceting -H 'Content-Type: application/json' --data-binary '{ "sortFacetValuesBy": {"*": "count"} }'
或者,您可以彈性地依計數排序單一篩選器,同時維持其他屬性的字母數字順序
curl -X PATCH 'http://127.0.0.1:7700/indexes/movies/settings/faceting -H 'Content-Type: application/json' --data-binary '{ "sortFacetValuesBy": {"*": "alpha", "genre": "count"} }'
您也可以在電子商務範例中嘗試此功能。
新功能:在查詢時可搜尋的屬性
使用新的 attributesToSearchOn
搜尋參數,您現在可以在查詢時將搜尋限制為可搜尋屬性的子集。它接受一個字串陣列,表示一個或多個文件屬性
{ "q": "adventure", "attributesToSearchOn": ["genre"] }
假設有以下文件,則上述查詢只會傳回 ID 為 1 的文件。
{ "id": 0, "name": "An Adventure in Space and Time", "genre": ["drama"] }, { "id": 1, "name": "A Strange and Stubborn Endurance", "genre": ["adventure"] }
相關性變更:屬性排名規則
在 v1.3 中,當查詢詞組在查詢中的位置越接近時,屬性排名規則會將較高的相關性指派給文件,相較之下,查詢詞組在查詢中的位置離其越遠,則相關性越低。
之前,此規則會根據詞組在屬性中的位置而非它們在搜尋查詢中的位置來衡量相關性。屬性開頭包含查詢詞組的文件被認為更相關。
請考量以下查詢:「蝙蝠俠黑暗騎士歸來」和對應的文件
{ "id": 0, "title": "Batman the dark knight returns" }, { "id": 1, "title": "Dark the Batman knight returns" }, { "id": 2, "title": "Batman returns: a retrospective", "description": "The Dark knight is analyzed in this new Batman documentary" }
在 1.3 版之前,屬性排名規則會將文件 2 放在清單頂端,其次是文件 0 和 1,並列排名。
自 1.3 版起,順序嚴格為:文件 0、文件 1、文件 2,這提供了更自然的排名。
其他改進
/tasks
路由現在會使用total
屬性顯示佇列中任務的總數。它也會根據特定篩選器顯示任務總數- 增強日語支援和分段
- 改進 Prometheus
/metrics
實驗性功能
貢獻者
我們非常感謝所有參與此版本的社群成員。我們要感謝:@vvv、@jirutka、@gentcys、@cuishuang、@0xflotus 和 @roy9495 為Meilisearch 提供協助。
我們還要特別感謝我們的 Meilistar,@mosuka,感謝他在 Charabia 上持續改進日語支援。
結論
這就是 v1.3 的所有內容!請記得查看變更日誌以取得完整版本資訊,下次見!
您可以訂閱我們的電子報,以保持關注。若要深入瞭解 Meilisearch 的未來並協助塑造它,請查看我們的路線圖並加入我們的產品討論。
如有其他任何疑問,請加入我們在Discord上的開發人員社群。