RavenDB:如果我用Ids创建索引,我应该指定任何索引选项吗?

时间:2013-02-03 19:23:39

标签: indexing ravendb lucene

来自RavenDB's documentation

  

每个RavenDB服务器实例使用的索引以方便快速   查询由全文搜索引擎 Lucene 提供支持。

     

Lucene接受一个文档,将其分解为Fields,然后拆分   将一个字段中的所有文本转换为令牌中的标记(术语)   标记化。那些令牌将存储在索引中,并且   后来被搜查了。

     

{...}

     

标记化和分析过程完成后,生成   令牌存储在索引中,现在可以使用。

进行搜索      

{...}

     

每个字段的默认值为Stores and中的FieldStorage.No   IndexIndexing.Default in Indexes。

     

设置FieldIndexing.No会导致值无法在哪里使用   查询时的条款(类似于未出现在原文中)   投影)。 FieldIndexing.NotAnalyzed导致整个属性   被视为单个令牌,匹配必须精确,类似于   在此字段上使用KeywordAnalyzer。后者对于有用   例如,产品ID。 FieldIndexing.Analyzed允许执行   针对该领域的全文搜索操作。的 FieldIndexing.Default   将该字段索引为单个术语,小写。


据我了解,要创建RavenDB索引,您只需要指定Map属性,如下所示:

public class PlayersIndex : AbstractIndexCreationTask<Player>
{
    public PlayersIndex()
    {
        Map = players => from doc in players
                            select new { doc.PlayerId, doc.TeamId, doc.PositionId };
    }
}

这是我的问题:

如果您认为PlayerIdGuidTeamIdintPositionIdenum,我应该:

  1. 不要指定任何索引选项吗?
  2. 将每个字段配置为FieldIndexing.NotAnalyzed
  3. 换句话说,我是否应该接受指定如下字段的想法?

    public class PlayersIndex : AbstractIndexCreationTask<Player>
    {
        public PlayersIndex()
        {
            Map = players => from doc in players
                                select new { doc.PlayerId, doc.TeamId, doc.PositionId };
    
            Indexes.Add(x => x.PlayerId, FieldIndexing.NotAnalyzed);
            Indexes.Add(x => x.TeamId, FieldIndexing.NotAnalyzed);
            Indexes.Add(x => x.PositionId, FieldIndexing.NotAnalyzed);
        }
    }
    

1 个答案:

答案 0 :(得分:1)

吉姆, 根据您的需要,您不必指定任何索引选项。