使用具有多个参数的NEST进行弹性搜索

时间:2014-04-11 10:05:11

标签: c# asp.net-mvc-4 elasticsearch nest

我有一个包含名称,类别,位置列的SQL表。我正在使用弹性搜索NEST。我的查询是这样的:

var result = client.Search<Models.Search.Poll>(s => s.Query(q => q.Fuzzy(f => f.OnField(p => p.Name).Value(query))))));

所以如果有一个名字=&#34的记录;我们在这里&#34;和用户搜索&#34;&#34; ,它返回结果。

现在我需要在此查询中再添加两个参数类别和位置:

所以我这样做了:

var result = client.Search<Models.Search.Poll>(s => s.Query(q => q.Fuzzy(f => f.OnField(p => p.Name).Value(query).OnField(r => r.Category).Value(category))));

但现在无法使用查询字段。但它现在适用于类别。这是我输入名字时得到的但不选择类别:

StatusCode: OK, 
    Method: POST, 
    Url: http://server.abc.com:9200/pollit-dev/polls/_search, 
    Request: {
  "query": {
    "fuzzy": {
      "category": {
        "value": "Select a Category"
      }
    }
  }
}, 
    Response: {"took":2892,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":0,"max_score":null,"hits":[]}}

我很好地尝试了这个:

var result = client.Search<Models.Search.Poll>(s => s.MatchAll().Query(q => q.Term(p => p.Name, query) || q.Term(p => p.Category,category) || q.Term(p => p.Location, Location)

但到目前为止没有运气。

此致 Asif Hameed

1 个答案:

答案 0 :(得分:1)

您有多种选择。 第一个几乎和你的一样,但你必须在那里使用Bool条件。

var result = client.Search<Models.Search.Poll>(s => s
      .MatchAll()
      .Query(q => q
         .Bool(b => b
           .Must(m => m.Term(p => p.Name, query) || m.Term(p => p.Category,category) || m.Term(p => p.Location, Location))
         )
       )
   );

现在另一种选择是使用queryContainers。像这样:

var result = _Instance.Search<Models.Search.Poll>(q => q
                .Query(qq =>
                {
                    QueryContainer termQuery = null;
                    QueryContainer locationQuery = null;
                    QueryContainer categoryQuery = null;

                    termQuery = qq.Term(p => p.Name, query);
                    categoryQuery = qq.Term(p => p.Category,category);
                    locationQuery = qq.Term(p => p.Location, Location);

                    return termQuery || categoryQuery || locationQuery;
                    })
           );

您还可以详细说明QueryContainers并在其中添加多个搜索参数。 希望这对你有所帮助。美好的一天!