elasticsearch 使用nest elastic search client生成带有命名字段的QueryString
我目前正在使用Nest elastic clien,因此请运行以下基本搜索条件:
elasticsearch 使用nest elastic search client生成带有命名字段的QueryString,
elasticsearch,nest,
elasticsearch,Nest,我目前正在使用Nest elastic clien,因此请运行以下基本搜索条件: .Query(q => q.QueryString(qs=>qs.Query("user search term"))); .Query( q => q.QueryString(qs => qs.Query("user search term")) && q.Terms(t => t.Brand, new string[] {"brand1", "br
.Query(q => q.QueryString(qs=>qs.Query("user search term")));
.Query(
q => q.QueryString(qs => qs.Query("user search term"))
&& q.Terms(t => t.Brand, new string[] {"brand1", "brand2"})
&& q.Terms(t => t.Colour, new string[] {"blue", "black"})
&& q.Range(r => r.From(50).To(100).OnField(f => f.Price))
);
我还将这些基本搜索词与facets过滤器相结合,如下所示:
.Query(q => q.QueryString(qs=>qs.Query("user search term")));
.Query(
q => q.QueryString(qs => qs.Query("user search term"))
&& q.Terms(t => t.Brand, new string[] {"brand1", "brand2"})
&& q.Terms(t => t.Colour, new string[] {"blue", "black"})
&& q.Range(r => r.From(50).To(100).OnField(f => f.Price))
);
但是,我很难运行适用于特定字段的自定义查询字符串搜索。
搜索查询字符串将传递到我的应用程序中,因此我不知道我搜索的特定字段,因此无法在客户端上使用.OnField()方法
例如,您希望能够传入一个查询字符串,该字符串同时按品牌、性别和颜色进行搜索。通过查看弹性搜索查询DSL,我认为我应该能够传入一个查询字符串,该字符串将字段命名为:
.Query(q => q.QueryString(qs => qs.Query("brand:brand1 AND gender:male AND colour(blue)")));
但这不起作用,也没有结果。如何生成查询字符串以搜索Nest客户端的特定字段
还有什么方法可以从nest SearchDescriptor查看生成的查询吗?您可以使用布尔查询
List<QueryContainer> shoudQuery = new List<QueryContainer>();
shoudQuery.Add(new MatchQuery()
{
Field = "brand",
Query = "brand1",
});
shoudQuery.Add(new MatchQuery()
{
Field = "gender",
Query = "male",
});
shoudQuery.Add(new MatchQuery()
{
Field = "colour",
Query = "blue",
});
QueryContainer queryContainer = new BoolQuery
{
Should = shoudQuery.ToArray(),
Must = new QueryContainer[] { new MatchAllQuery() },
MinimumShouldMatch = 3,
};
var result = Client.Search(s => s.Size(resultSize).Query(q => queryContainer)
List shoudQuery=newlist();
shoudQuery.Add(新的MatchQuery()
{
Field=“品牌”,
Query=“brand1”,
});
shoudQuery.Add(新的MatchQuery()
{
Field=“性别”,
Query=“male”,
});
shoudQuery.Add(新的MatchQuery()
{
Field=“color”,
Query=“蓝色”,
});
QueryContainer QueryContainer=newboolquery
{
Should=shoudQuery.ToArray(),
必须=new QueryContainer[]{new MatchAllQuery()},
最小值应匹配=3,
};
var result=Client.Search(s=>s.Size(resultSize).Query(q=>queryContainer)
您可以通过前面的问题看到NEST发送给Elasticsearch的内容:感谢您看到生成的json帮助我意识到使用NEST客户端生成的查询字符串正是我所需要的,因此问题出在我最初对索引的映射上。作为一个术语,还可以生成品牌和性别fie的查询lds他们被设置为FieldIndexOption.not_分析了问题所在。