【发布时间】:2018-05-29 22:30:36
【问题描述】:
我有两个具有以下映射的索引(我将缩短它们的映射):
1) AccountType 映射:
elasticClient.CreateIndex("account", i => i
.Settings(s => s
.NumberOfShards(2)
.NumberOfReplicas(0)
)
.Mappings(m => m
.Map<AccountType>(map => map
.AutoMap()
.Properties(p => p
.Text(c => c
.Name(n => n.Name)
.Analyzer("standard")
)
.Text(c => c
.Name(n => n.Description)
.Analyzer("standard")
)
)
)
)
);
2) 产品类型映射:
elasticClient.CreateIndex("proudct", i => i
.Settings(s => s
.NumberOfShards(2)
.NumberOfReplicas(0)
)
.Mappings(m => m
.Map<ProductType>(map => map
.AutoMap()
.Properties(p => p
.Text(c => c
.Name(n => n.Title)
.Analyzer("standard")
)
.Text(c => c
.Name(n => n.Description)
.Analyzer("standard")
)
)
)
)
);
现在我有几件事需要弄清楚:
1) 首先,最好有一个索引,在我的情况下是帐户,并且将产品作为嵌套对象,但是每次我想更新/添加新产品时,我都必须重新索引(更新)整个账户文件?
2)我的第二个问题是:我想要搜索功能,所以如果用户通过在文本框中输入搜索,我希望获得帐户和产品的最佳匹配(这里我将搜索产品的标题和描述加上帐户名称和描述,然后获得最佳匹配):
所以这里如何使用 Nest ElasticSeach 搜索多个索引,或者如果不可能从每个索引中获得最佳匹配,然后根据分数从两个结果中获得最佳匹配是一个好主意?
PS: 以下是在产品索引中搜索的示例:
var result = elasticClient.Search<ProductType>(s => s
.Size(10)
.Query(q => q
.MultiMatch(m => m
.Fields(f => f.Field(p => p.Title, 1.5).Field(p => p.Description, 0.8))
.Operator(Operator.Or)
.Query(query)
)
)
);
【问题讨论】:
标签: elasticsearch nest