elasticsearch 使用nest elastic search client生成带有命名字段的QueryString,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 使用nest elastic search client生成带有命名字段的QueryString,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 使用nest elastic search client生成带有命名字段的QueryString

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

我目前正在使用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", "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)
  • 如果您想要3并且=>MinimumShouldMatch=3
  • 如果你想要三分之二 =>最小值应匹配=2


  • 您可以通过前面的问题看到NEST发送给Elasticsearch的内容:感谢您看到生成的json帮助我意识到使用NEST客户端生成的查询字符串正是我所需要的,因此问题出在我最初对索引的映射上。作为一个术语,还可以生成品牌和性别fie的查询lds他们被设置为FieldIndexOption.not_分析了问题所在。