AI Search の検索インデックス作成
クロールしてクレンジングしたはてなブログ記事のドキュメントを登録する AI Search のインデックスを一括で作成するコンソールアプリを準備しました。
github.com
なお、AI Search の検索インデックスは RDBMS の世界に例えれば
- 検索インデックス = RDBMS のテーブル
- ドキュメント = RDBMS のテーブルにおける行
と理解いただければ、イメージしやすいと思います。
検索インデックスのスキーマは以下のように C# のコードで記述できます。
この SDK は頻繁に更新されるので文法が変わっている可能性があります。最新情報を必ずご確認下さい!
var semanticConfigName = "defaultSemanticConfig"; var vectorConfigName = "defaultVectorConfigName"; var algorithmConfigName = "hnsw"; var vectorSearch = new VectorSearch(); vectorSearch.Algorithms.Add(new HnswAlgorithmConfiguration(algorithmConfigName)); vectorSearch.Profiles.Add(new VectorSearchProfile(vectorConfigName, algorithmConfigName)); var semanticPrioritizedFields = new SemanticPrioritizedFields() { TitleField = new SemanticField("title"), }; semanticPrioritizedFields.ContentFields.Add(new SemanticField("content")); // TODO : Add prioritizedKeywordsFields var semanticSearch = new SemanticSearch(); semanticSearch.Configurations.Add(new SemanticConfiguration(semanticConfigName, semanticPrioritizedFields)); var defaulIindex = new SearchIndex(indexName) { VectorSearch = vectorSearch, SemanticSearch = semanticSearch, Fields = { new SearchField("id", SearchFieldDataType.String) { IsKey = true, IsSearchable = true }, new SearchField("lastUpdated", SearchFieldDataType.String) { IsSearchable = true, IsFacetable = false, }, new SearchField("content", SearchFieldDataType.String) { IsSearchable = true, IsSortable = false, IsFacetable = false, IsFilterable = false, AnalyzerName = LexicalAnalyzerName.JaMicrosoft }, new SearchField("title", SearchFieldDataType.String) { IsSearchable = true, IsSortable = false, IsFacetable = false, IsFilterable = false, AnalyzerName = LexicalAnalyzerName.JaMicrosoft }, new SearchField("filePath", SearchFieldDataType.String) { IsSearchable = true, IsSortable = false, IsFacetable = false, IsFilterable = false }, new SearchField("url", SearchFieldDataType.String) { IsSearchable = true }, new SearchField("metadata", SearchFieldDataType.String) { IsSearchable = true }, new SearchField("contentVector", SearchFieldDataType.Collection(SearchFieldDataType.Single)) { IsSearchable = true, VectorSearchDimensions = 1536, VectorSearchProfileName = vectorConfigName }, }, };
フィールド
このアプリで作成されるフィールドは以下のようになります。
各フィールド定義の詳細は以下の公式ドキュメントを参照ください。
learn.microsoft.com
セマンティック構成
このアプリで作成されるセマンティック構成は以下のようになります。
ベクタープロファイル
このアプリで作成されるベクタープロファイルは以下のようになります。
次の記事
hiro128.hatenablog.jp