我试图使用具有多个值的完成上下文。上下文只接受一个值。
string contextValue = "10";
List<string> listOfContextValues = new List<string> {"10", "20","30"};
var a = Client.Search<Post>(s => s
.Suggest(su => su
.Completion("categories", cs => cs
.Field(f => f.CSuggest)
.Prefix(query)
.Contexts(co => co
.Context("sourceid",
cd => cd.Context(contextValue)
)
)
)
));我不知道如何用listOfContextValues过滤我的建议字段。
更新
当我使用for循环并将单个上下文作为筛选器并将其存储到列表中时。
同时使用Russ建议的代码并将结果存储在列表中。但在第二份名单中缺少了一些结果。
如你在下面所看到的:
var socialNetworks = srvUser.GetUserSocialNetworks(userId);
List<string> tags = new List<string>();
foreach (var socialNetwork in socialNetworks)
{
var result = Client.Search<Post>(s => s
.Suggest(su => su
.Completion("categories", cs => cs
.Field(f => f.CSuggest)
.Prefix(query)
.Contexts(co => co
.Context("sourceid",
cd => cd.Context(socialNetwork)
)
)
)
));
List<string> br = result.Suggest["categories"].SelectMany(x => x.Options)
.Select(y => y.Text).Distinct().ToList();
tags.AddRange(br);
}
var searchResponse = Client.Search<Post>(s => s
.Suggest(su => su
.Completion("categories", cs => cs
.Field(f => f.CSuggest)
.Prefix(query)
.Contexts(co => co
.Context("sourceid", socialNetworks
.Select<string, Func<SuggestContextQueryDescriptor<Post>, ISuggestContextQuery>>(v => cd => cd.Context(v))
.ToArray()
)
)
)
)
);
List<string> sa = searchResponse.Suggest["categories"].SelectMany(x => x.Options).Select(y => y.Text).Distinct().ToList();
if (sa.Count != tags.Count)
{
// >>>>> counts are not the same
}发布于 2017-06-07 21:37:24
as the second argument,因此对于上下文值的集合,您可以这样做。
void Main()
{
var client = new ElasticClient();
var listOfContextValues = new List<string> { "10", "20", "30" };
var query = "query";
var searchResponse = client.Search<Post>(s => s
.Suggest(su => su
.Completion("categories", cs => cs
.Field(f => f.CSuggest)
.Prefix(query)
.Contexts(co => co
.Context("sourceid",
listOfContextValues
.Select<string, Func<SuggestContextQueryDescriptor<Post>, ISuggestContextQuery>>(v => cd => cd.Context(v))
.ToArray()
)
)
)
)
);
}
public class Post
{
public CompletionField CSuggest { get; set; }
}发布于 2017-06-07 19:47:17
你在找尺码吗?
...s =>
s.Completion("categories",
cs=> cs.
Field(p => p.Suggestion)
.Contexts(
ctx =>
ctx.Context("sid", d => d.Context(value))
.Prefix(searchText)
.Size(10);https://stackoverflow.com/questions/44409660
复制相似问题