将DSL查询转换为NEST查询

时间:2015-06-25 09:35:24

标签: elasticsearch nest

我的DSL查询如下:

{
"from": 0,
"size": 200,
"query": {
    "filtered": {
        "filter": {
            "bool": {
                "must": {
                    "query": {
                        "match": {
                            "contactId": {
                                "query": "e84aca88-7b82-43d9-8788-4cc25af0c43a",
                                "type": "phrase"
                            }
                        }
                    }
                }
            }
        }
    }
}

}

我尝试将dsl查询转换为NEST查询。

var descriptor =
            new SearchDescriptor<dynamic>().From(0)
                .Size(200)
                .Query(
                    a =>
                        a.Filtered(
                            b =>
                                b.Filter(
                                    c =>
                                        c.Bool(
                                            d =>
                                                d.Must(
                                                    e =>
                                                        e.Query(
                                                            f =>
                                                                f.Match(
                                                                    g =>
                                                                        g.OnField("contactId")
                                                                            .Query(
                                                                                "e84aca88-7b82-43d9-8788-4cc25af0c43a"))))))));
        string result = System.Text.Encoding.Default.GetString(client.Serializer.Serialize(descriptor));

我在SearchDescriptor的帮助下检查了json结果。存在差异:

{
"from": 0,
"size": 200,
"query": 
{
    "filtered": 
    {
        "filter": {
            "bool": 
            {
                "must": [
                {
                    "fquery": 
                    {
                        "query": 
                        {
                            "match": 
                            {
                                "contactId": 
                                {
                                    "query": "e84aca88-7b82-43d9-8788-4cc25af0c43a"
                                }
                            }
                        }
                    }
                }]
            }
        }
    }
}

}

正如你所看到的那样添加了fquery,但我没有找到我的Nest查询。 Fquery为什么要添加?第一个DSL查询返回结果,但第二个DSL查询没有返回任何结果

1 个答案:

答案 0 :(得分:0)

我的更新代码:

var searchResults =
            client.Search<dynamic>(u=>u.From(0)
                .Size(200)
                .Query(
                    a =>
                        a.Filtered(
                            b =>
                                b.Filter(
                                    c =>
                                        c.Bool(
                                            d =>
                                                d.Must(
                                                    e =>
                                                        e.Query(
                                                            f =>
                                                                f.MatchPhrase(
                                                                    g =>
                                                                        g.OnField("contactId")
                                                                            .Query(
                                                                                "e84aca88-7b82-43d9-8788-4cc25af0c43a")))))))));