使用Nest使用英语分析器创建索引

时间:2018-05-26 11:34:31

标签: elasticsearch 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,我也不确定应该通过哪些&#34; english_keywords&#34; &#34; english_stemmer&#34;

问题2 :如果我使用英文分析器,Elasticsearch会自动意识到这些条款:&#34;烧烤&#34;和&#34;烧烤&#34;是同义词?或者我是否需要明确地将同义词列表传递给ES?

1 个答案:

答案 0 :(得分:0)

查看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")
                )
            )
        )
    )
); 

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

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

  1. 在索引输入上的索引时执行同义词扩展。这将导致更快的搜索,代价是相对固定的方法。
  2. 在查询输入时在查询时执行同义词扩展。这将导致搜索速度变慢,但可以灵活地在需要时更轻松地添加新的同义词映射。
  3. 您始终可以采用两种方法,即索引您希望与搜索用例相关的同义词,并在查询时添加新的同义词,因为您发现它们与您的用例相关