RavenDB-什么是“字符串索引”

RavenDB-什么是“字符串索引”,ravendb,Ravendb,在RavenDB讨论板上我问了一个关于制作大量类似索引的问题,我被告知我不应该制作这么多做同样事情的索引,并告诉我应该制作一个字符串索引,而确切的单词是 没有理由让这么多索引做同样的事情。 使用以下内容创建索引: 从文档中的d开始 选择新{d.Id,d.Name,Collection=d[@metadata][Raven Entity Name]} 并对此提出质疑 我完全不明白这意味着什么,在今天之前我已经阅读了很多次raven文档,我仍然非常迷茫和茫然 我能想到的最好的;或者我最接近的理解是,

在RavenDB讨论板上我问了一个关于制作大量类似索引的问题,我被告知我不应该制作这么多做同样事情的索引,并告诉我应该制作一个字符串索引,而确切的单词是

没有理由让这么多索引做同样的事情。 使用以下内容创建索引:

从文档中的d开始 选择新{d.Id,d.Name,Collection=d[@metadata][Raven Entity Name]}

并对此提出质疑

我完全不明白这意味着什么,在今天之前我已经阅读了很多次raven文档,我仍然非常迷茫和茫然

我能想到的最好的;或者我最接近的理解是,像这样的事情

RavenSession.Advanced.DocumentStore.DatabaseCommands.PutIndex("Index/Name",
    new Raven.Client.Indexes.IndexDefinitionBuilder<IMayTransform>{
        Map = results => from result in results
            select new{
                result.Id,
                result.Name,
                result["@metadata"]["Raven-Entity-Name"]
            }
    });
这正是我需要它做的。它速度快,效率高,运行良好,不会给我带来任何麻烦,但将所有内容硬编码到字符串查询中让我发疯。我正在结束这个问题并开始一个关于这个问题的新问题,但如果有人对我如何摆脱这个问题有建议,我很乐意听取他们的意见。这是个人欲望的问题,而不是功能性需求。

像这样尝试吧

RavenSession.Advanced.DocumentStore.DatabaseCommands.PutIndex(
    "Index/Name", 
    new IndexDefinition {
        Map = "from d in docs select new { Id = d.Id, Name = [\"@metadata\"][\"Raven-Entity-Name\"]}"
    });
现在你也知道字符串索引是什么了

顺便说一句:有一个内置索引,它的功能与此类似:

用法:

public class Entity 
{
    public string Id { get; set; }

    public string Name { get; set; } }
}

session.Query<Entity>("Index/Name").Where(x => x.Name == "Foo");

现在您可以基于EntityBase和查询TypeName构建ravendb索引了

您也可以添加IMayTransfrom接口吗?我也不知道如何准确地查询。这必须在字符串中完成,因为raven此时不知道您的对象。我还添加了用法。请记住,对于反序列化,您必须给出一个实际的类,接口在这里没有实际用途。接口不能用于索引定义,而是调用索引时使用的实际类吗?我不理解Raven实体名称的用途。这基本上意味着我必须始终根据对象的实际名称而不是实体进行查询?我很困惑。
RavenSession.Advanced.DocumentStore.DatabaseCommands.PutIndex(
    "Index/Name", 
    new IndexDefinition {
        Map = "from d in docs select new { Id = d.Id, Name = [\"@metadata\"][\"Raven-Entity-Name\"]}"
    });
public class Entity 
{
    public string Id { get; set; }

    public string Name { get; set; } }
}

session.Query<Entity>("Index/Name").Where(x => x.Name == "Foo");
public class EntityBase
{
    public EntityBase()
    {
        this.TypeName = this.GetType().Name;
    }

    public string Name { get; set; }

    public string TypeName { get; set; }
}

public class Person : EntityBase
{
    public string FirstName { get; set; }

    public string LastName { get; set; }
}