【发布时间】:2017-12-06 08:36:26
【问题描述】:
我正在尝试MultiMatch 搜索条件。我知道过去有人问过类似的问题,但使用NEST 时没有。这是我目前的搜索,它适用于整个文档
var response = await this.client.SearchAsync<EmployeeDocument>(
x => x.Index(this.settings.IndexName).Type("employee").From(page * pageSize)
.Size(pageSize).Query(
q => q.MultiMatch(m => m
.Query(query)
.Type(TextQueryType.MostFields)
.MinimumShouldMatch("90%")
.Fields(f => f
.Field(_ => _.FullName, 3)
.Field(_ => _.Number, 3)
.Field(_ => _.Email)
.Field(_ => _.CompanyName, 2)
.Field(_ => _.JobNumber)
.Field(_ => _.Description))))
.Highlight(
h => h.PreTags("<mark>").PostTags("</mark>")
.Fields(
f => f.Field(p => p.FullName),
f => f.Field(p => p.CompanyName),
f => f.Field(p => p.JobNumber),
f => f.Field(p => p.Number),
f => f.Field(p => p.Email),
f => f.Field(p => p.Description))));
如何添加条件也只搜索特定字段? (CompanyId)
例如,上面的代码进行了员工搜索,但它只需要在特定公司内部进行搜索。
这是我尝试过的
var response = await this.client.SearchAsync<EmployeeDocument>(
x => x.Index(this.settings.IndexName).Type("employee").From(page * pageSize)
.Size(pageSize).Query(
q => q.MultiMatch(m => m
.Query(query)
.Type(TextQueryType.MostFields)
.MinimumShouldMatch("90%")
.Fields(f => f
.Field(_ => _.FullName, 3)
.Field(_ => _.Number, 3)
.Field(_ => _.Email)
.Field(_ => _.CompanyName, 2)
.Field(_ => _.JobNumber)
.Field(_ => _.Description))))
.Query(_ => _.Bool(b => b.Must(descriptor =>
descriptor.Term(t =>
t.Field(document => document.CompanyGroupId).Value(4213))))) // I ADDED THIS SECTION HERE
.Highlight(
h => h.PreTags("<mark>").PostTags("</mark>")
.Fields(
f => f.Field(p => p.FullName),
f => f.Field(p => p.CompanyName),
f => f.Field(p => p.JobNumber),
f => f.Field(p => p.Number),
f => f.Field(p => p.Email),
f => f.Field(p => p.Description))));
我添加了额外的查询来执行bool 条件,但我似乎没有返回正确的输出。但我确定我的NEST 查询是错误的
【问题讨论】:
标签: elasticsearch nest elasticsearch-5