gpt4 book ai didi

c# - 如何在 Ravendb 中创建复合索引

转载 作者:行者123 更新时间:2023-11-30 22:35:35 25 4
gpt4 key购买 nike

我的数据库(RavenDB)中有文档集合“Messages”文档定义如:

class Message
{
string Content;
Tag[] Tags;
Location[] Locations;
string[] Actions;
bool IsActive;
}

标签类定义:

class Tag
{
string Value;
Translation[] Translations;
}

位置类:

class Location
{
string Code;
Translation[] Translations;
}

翻译类:

class Translation
{
string LanguageCode;
string Value;
}

所以,我想创建一个索引,允许我通过多个字段进行查询:

  1. 按 Message.Content 进行全文搜索
  2. 仅包含 IsActive==true 的消息
  3. 在 Message.Actions 中包含我的操作的消息
  4. 包含带有 myValue 和 myLanguageCode 标签的消息
  5. 包含一些 myCode 和 myLanguageCode 的位置

我想同时查询所有条件

那么,我应该如何为 RavenDB 定义索引?

最佳答案

好吧,在对 RavenDB 自动动态索引进行了简短的研究之后,我创建了类似的东西

new IndexDefinition
{
Map = @"
from doc in docs.Messages
where IsActive==true
from docActionsItem in (IEnumerable<dynamic>)doc.Actions
from docTagsItem in (IEnumerable<dynamic>)doc.Tags
from docTagsItemTranslationsItem in (IEnumerable<dynamic>)docTagsItem.Translations
from docLocationsItem in (IEnumerable<dynamic>)doc.Locations
from docLocationsItemTranslationsItem in (IEnumerable<dynamic>)docLocationsItem.Translations
select new {
TagsValue = docTagsItem.Value,
Content = doc.Content,
Actions=docActionsItem,
TagsTranslationsLanguageCode = docTagsItemTranslationsItem.LanguageCode,
TagsTranslationsValue = docTagsItemTranslationsItem.Value,
LocationsCode = docLocationsItem.Code,
LocationsTranslationsLanguageCode=docLocationsItemTranslationsItem.LanguageCode,
LocationsTranslationsValue=docLocationsItemTranslationsItem.Value
}",
Analyzers =
{
{"Content", typeof(StandardAnalyzer).FullName},
}
}

关于c# - 如何在 Ravendb 中创建复合索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7400970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com