AI 驅動的混合搜尋功能正在封閉測試中。 加入候補名單 以搶先體驗!

前往首頁Meilisearch 的標誌
返回文章
2024 年 10 月 29 日

Meilisearch 1.11

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

Carolina Ferreira
Carolina Ferreira開發者倡議者 @ Meilisearch@CarolainFG
Meilisearch 1.11

我們很高興推出 Meilisearch v1.11。在本文中,我們將介紹最重要的變更。如需完整的更新列表,請瀏覽 GitHub 上的更新日誌

Meilisearch 1.11 也已在 Meilisearch Cloud 上提供 - 立即升級!

實驗性功能:向量資料庫索引效能改進

Meilisearch v1.11 引入了新的嵌入器選項binaryQuantized

二元量化透過使用 1 位元值編碼每個維度來壓縮向量,顯著提升效能,尤其是在具有超過 100 萬個文件和超過 1024 個維度的模型的資料集中。

較小的嵌入 (少於 1024 個維度) 往往會產生較差的結果。當維度較少時,二元向量無法保留足夠的資訊來達到良好的相關性。

啟用此功能會永久更新所有向量,使其僅包含 1 和 -1,這可能會嚴重影響搜尋相關性。此變更不可逆。

在啟用此功能之前,我們建議在開發環境中的較小或重複索引中測試此功能,以評估其對您使用案例的影響。

實驗性功能:AI 驅動的搜尋改進

重大變更

此版本為穩定功能引入了幾項重大變更。

embedder 參數變成強制性

在之前的版本中,如果未指定嵌入器,則在搜尋和類似請求時會自動使用預設嵌入器。從 v1.11 開始,在執行時必須指定 embedder 參數

  • 透過GETPOST進行語義或混合搜尋,其中嵌入器必須包含在 hybrid 物件中。
  • 透過GETPOST進行相似性搜尋,其中 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 時),也必須包含具有 embedderhybrid 物件。

client.index('INDEX_NAME').search({
  vector: [0, 1, 2],
  hybrid: {
      embedder: 'EMBEDDER_NAME'// mandatory as of v1.11
   }
})

當傳遞 vector 而不使用 q 時,現在會忽略非零的 semanticRatio

在 Meilisearch v1.11 之前,當使用vectorhybrid參數執行搜尋,但不使用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 為聯合搜尋引入了兩個新選項:facetsByIndexmergeFacets。這些選項可讓您為聯合搜尋結果請求分面分配統計

依索引分面資訊

若要擷取每個個別索引的分面分配和統計,請使用 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": {}
    }
  }
}

合併的分面資訊

若要從單一結果中的所有索引取得分面分配和統計,請同時使用facetsByIndexmergeFacets

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 討論分享您的回饋

貢獻者感謝

我們要衷心感謝為此版本做出貢獻的貢獻者:@iornsteinMeilisearch 上的協助,以及 @luflow@tkhshtsh0917charabia 上的工作。

我們還要特別感謝 SDK 維護人員,他們努力讓 Meilisearch 適用於許多語言和架構


v1.11 的內容到此結束!這些版本資訊僅重點說明最重要的更新。如需完整的清單,請閱讀 Github 上的更新日誌

使用 Meilisearch Cloud 輕鬆升級。

開啟 Meilisearch Cloud


訂閱我們的每月電子報,隨時掌握 Meilisearch 的最新動態。若想了解更多 Meilisearch 的未來發展方向並參與塑造,請查看我們的路線圖並參與我們的產品討論

如有其他任何疑問,請加入我們在 Discord 上的開發者社群。

Meilisearch 1.12

Meilisearch 1.12

Meilisearch 1.12 版本顯著提升了索引速度,並導入了新的 API,可以停用前綴搜尋和分面搜尋,並檢索任務批次。

Laurent Cazanove
Laurent Cazanove2024 年 12 月 23 日
Meilisearch Q4 2024 release wrap-up

Meilisearch 2024 年第四季度版本總結

Meilisearch 第四季度版本包含更快的搜尋速度、對 UI 中設定的更多控制以及一個新的地區。

Maya Shin
Maya Shin2024 年 11 月 27 日
Meilisearch 1.10

Meilisearch 1.10

Meilisearch 1.10 引入了聯合搜尋和地區設定,並為 AI 驅動的搜尋穩定性鋪路。

Laurent Cazanove
Laurent Cazanove2024 年 8 月 27 日