每个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 };
}
}
这是我的问题:
如果您认为PlayerId
是Guid
,TeamId
是int
,PositionId
是enum
,我应该:
FieldIndexing.NotAnalyzed
?换句话说,我是否应该接受指定如下字段的想法?
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);
}
}
答案 0 :(得分:1)
吉姆, 根据您的需要,您不必指定任何索引选项。