使用 Nest 使用 English Analyzer 创建索引

Creating an Index with English Analyzer using Nest

我正在使用 nest 创建我的 Elasticsearch 索引。我有两个问题:

问题 1. 如何添加设置以使用英语分析器并回退标准分析器?

这就是我创建索引的方式:

Uri _node = new Uri("elasticUri");
ConnectionSettings _connectionSettings = new ConnectionSettings(_node)
            .DefaultIndex("MyIndexName")
            .DefaultMappingFor<POCO>(m => m
            .IndexName("MyIndexName")
        );
IElasticClient _elasticClient = new ElasticClient(_connectionSettings);

var createIndexResponse = _elasticClient.CreateIndex("MyIndexName", c => c
   .Mappings(m => m
      .Map<POCO>(d => d.AutoMap())
   )
);

查看示例Here,我也不确定我应该为"english_keywords"[=31=传递什么],等等

问题2:如果我使用English Analyzer,Elasticsearch会自动识别术语:"Barbecue"和"BBQ"是同义词吗?或者我是否需要显式地将同义词列表传递给 ES?

查看 configuring a built-in analyzer for an index 的 NEST 文档。

documentation for the english analyzer 简单地演示了您如何可以 自己重新实现 english 分析器,作为自定义分析器,使用内置的分析组件,如果您需要自定义分析的任何部分。如果您不需要这样做,只需使用 english 作为字段分析器的名称

client.CreateIndex("my_index", c => c
    .Mappings(m => m
        .Map<POCO>(mm => mm
            .AutoMap()
            .Properties(p => p
                .Text(t => t
                    .Name(n => n.MyProperty)
                    .Analyzer("english")
                )
            )
        )
    )
); 

将对 POCO 上的 MyProperty 字段使用内置的 english 分析器。

english 分析器不会为您执行自动同义词扩展,您需要配置与您的搜索问题相关的同义词。关于同义词,你有两个选择

  1. 在索引时对索引输入执行同义词扩展。这将以相对固定的方法为代价加快搜索速度。
  2. 在查询时对查询输入执行同义词扩展。这将导致搜索速度变慢,但提供了灵活性,可以在需要时更轻松地添加新的同义词映射。

您始终可以采用两者兼用的方法,即为您希望与搜索用例相关的同义词编制索引,并在查询时添加新的同义词,因为您发现它们与您的搜索用例相关用例。