elasticsearch 5.x:如何使嵌套匹配查询搜索

薇薇恩·比尼(Vivien Beanie)

在上一版的Nest中,我知道如何用nest做等效的基本es匹配查询:

我创建了一个示例索引和映射

PUT /base_well
{
    "mappings": {
        "person": {
               "properties": {
                   "first_name":{
                       "type": "string"
                   },
                     "last_name":{
                       "type": "string"
                   },
                   "age":{
                       "type": "integer"
                   }
               }
        }
    }
}

POST /base_well/person
{
    "first_name":"Adrien",
    "last_name" : "Mopo",
    "Age" : 21
}

POST /base_well/person
{
    "first_name":"Polo",
    "last_name" : "Apou",
    "Age" : 36
}

ES请求实际上有效

 POST  /base_well/person/_search
    {
        "query":
        {
        "match":{
            "first_name":"Adrien"         
        }
    }
}

这个Elasticsearch请求给我这个答案:

{
   "took": 3,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 1,
      "max_score": 0.2876821,
      "hits": [
         {
            "_index": "base_well",
            "_type": "person",
            "_id": "AVkq9PI5ybdSs0epy_Rb",
            "_score": 0.2876821,
            "_source": {
               "first_name": "Adrien",
               "last_name": "Mopo",
               "Age": 21
            }
         }
      ]
   }
}

不再有效的NEST等效项:

public class Person
{
    public string first_name {get;set;}
    public string last_name { get; set; }
    public int Age { get; set; }
}

//nest equivalent does not work anymore
var uri = new Uri("http://localhost:9200");
var setting = new ConnectionSettings(uri);
setting.DisableDirectStreaming(true);
setting.DefaultIndex("base_well");
var Client = new ElasticClient(setting);

var response = Client.Search<Person>(s => s.Query(p => p.Term(q => q.first_name, "Adrien")));
var tooks = response.Took;
var hits = response.Hits;
var total = response.Total;

它给了我0文档结果,0点击

在此处输入图片说明

您知道在最新版本中该怎么做吗?

薇薇恩·比尼(Vivien Beanie)
var response = Client.Search<Person>(s => s.Query(p => p.Match(m => m.Field(f => f.first_name).Query("Marc"))));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章