elasticsearch 使用Nest使用English Analyzer创建索引,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 使用Nest使用English Analyzer创建索引,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 使用Nest使用English Analyzer创建索引

elasticsearch 使用Nest使用English Analyzer创建索引,elasticsearch,nest,elasticsearch,Nest,我正在使用nest创建Elasticsearch索引。我有两个问题: 问题1。如何添加设置以使用英语analyzer(标准analyzer有回退功能) 以下是我创建索引的方式: Uri _node = new Uri("elasticUri"); ConnectionSettings _connectionSettings = new ConnectionSettings(_node) .DefaultIndex("MyIndexName") .D

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

问题1。如何添加设置以使用英语analyzer(标准analyzer有回退功能)

以下是我创建索引的方式:

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())
   )
);
Uri\u node=newuri(“elasticUri”);
ConnectionSettings\u ConnectionSettings=新的ConnectionSettings(\u节点)
.DefaultIndex(“MyIndexName”)
.DefaultMappingFor(m=>m
.IndexName(“MyIndexName”)
);
IElasticClient\u elasticClient=新的elasticClient(\u连接设置);
var createIndexResponse=\u elasticClient.CreateIndex(“MyIndexName”,c=>c
.Mappings(m=>m
.Map(d=>d.AutoMap())
)
);
看看这些例子,我也不确定我应该把什么叫做“英语关键词”“英语词干分析器”等等


问题2:如果我使用英语分析器,Elasticsearch会自动意识到“烧烤”和“烧烤”是同义词吗?或者我需要显式地将同义词列表传递给同义词吗

请查看的嵌套文档

简单地演示了如果需要自定义分析的任何部分,如何使用内置的分析组件,以自定义分析器的身份重新实现
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")
                )
            )
        )
    )
); 
client.CreateIndex(“我的索引”,c=>c
.Mappings(m=>m
.Map(mm=>mm
.AutoMap()
.Properties(p=>p
.Text(t=>t
.Name(n=>n.MyProperty)
.Analyzer(“英语”)
)
)
)
)
); 
将对
POCO
上的
MyProperty
字段使用内置的
english
分析器

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

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

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

    非常感谢Russ。我会通过在POCO类中的MyProperty上添加:[Text(Analyzer=“english”)]属性来实现同样的效果吗?如果我采用第一种方法,是否有可以下载和使用的通用同义词的标准列表?使用该属性将起作用,您还需要调用
    AutoMap()
    ,以便考虑该属性。关于同义词,这是一个非常广泛的问题。可以使用诸如WordNet()之类的公共数据集。请务必阅读有关同义词()的最终指南