您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Nest RecommendationCompletion用法,引发“不是完成建议字段”异常

Nest RecommendationCompletion用法,引发“不是完成建议字段”异常

您尝试创建一个名称为“ companyName.completion”的属性,但是在该位置该属性无效,它将使用最后一个标记“completion”。因此,它实际上映射了一个称为完成的字段…。尝试将调用更改为:.Name(p => p.CompanyName)

您可以为,Contact但在建立索引时使用PersonCompany类型。

用您映射的Elasticsearch术语:

/index/contact/

但您的文档将进入:

/index/person//index/company

NEST不会自动映射特定类的所有实现,elasticsearch无法知道这三个类之间的关系。

我会重构到方法的映射,并为所有涉及的类型调用它。

 var createResult = client.CreateIndex(indexName, index => index                
      .AddMapping<Contact>(tmd => MapContactCompletionFields(tmd))
      .AddMapping<Person>(tmd => MapContactCompletionFields(tmd))
      .AddMapping<Company>(tmd => MapContactCompletionFields(tmd))   
  );

 private RootObjectMappingDescriptor<TContact>  MapContactCompletionFields<TContact>(
      RootObjectMappingDescriptor<TContact> tmd)
      where TContact : Contact
 {
      return  tmd.Properties(props => props
           .Completion(s => s
                .Name(p => p.CompanyName.Suffix("completion"))
                .IndexAnalyzer("standard")
                .SearchAnalyzer("standard")
                .MaxInputLength(20)
                .Payloads()
                .PreservePositionIncrements()
                .PreserveSeparators()
           )                        
       );
 }

方法返回描述符,因此您可以进一步对其进行链接

然后,当您搜索联系人时:

var result = getElasticClientInstance("contacts").Search<Contact>(
    body => descriptor
        .Types(typeof(Person), typeof(Company))
);

该类型提示将导致搜索/index/person/index/company并且将知道如何向您返回文档的协变列表。

因此,您可以result.Documents.OfType<Person>()在上一个呼叫之后执行

其他 2022/1/1 18:14:54 有481人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶