0

来自RavenDB 的文档

每个 RavenDB 服务器实例用于促进快速查询的索引由全文搜索引擎Lucene提供支持。

Lucene 获取一个 Document,将其分解为 Fields,然后在称为 Tokenization 的过程中将 Field 中的所有文本拆分为标记(Terms)。这些标记将存储在索引中,稍后将对其进行搜索。

{...}

标记化和分析过程完成后,生成的标记存储在索引中,现在可以使用该索引进行搜索。

{...}

每个字段的默认值是 Stores 中的 FieldStorage.No 和 Indexes 中的 FieldIndexing.Default。

设置 FieldIndexing.No 会导致查询时 where 子句中的值不可用(类似于原始投影中不存在)。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 };
    }
}

这是我的问题:

如果您假设PlayerIdGuidTeamIdint, 并且PositionIdenum,我应该:

  1. 避免指定任何索引选项?
  2. 将每个字段配置为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);
    }
}
4

1 回答 1

1

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

于 2013-02-03T21:54:53.880 回答