gpt4 book ai didi

elasticsearch - QueryContainerDescriptor vs QueryContainer vs QueryBase

转载 作者:行者123 更新时间:2023-12-02 22:43:27 25 4
gpt4 key购买 nike

谁能解释 QueryContainerDescriptor、QueryContainer 和 QueryBase 之间有什么区别?

如何将查询(或 QueryBase)分配给 QueryContainer?

在下面的代码中,我可以将相同的 TermQuery 分配给 QueryBase 和 QueryContainer 对象:

QueryBase bq = new TermQuery
{
Field = Field<POCO>(p => p.Title),
Value = "my_title"
};

QueryContainer tq = new TermQuery
{
Field = Field<POCO>(p => p.Title),
Value = "my_title"
};

另外我不确定使用 QueryContainerDescriptor 创建 TermQuery 和上述方法之间是否有任何区别?
QueryContainer qcd = new QueryContainerDescriptor<POCO>().
Term(r => r.Field(f => f.Title).Value("my_title"));

最佳答案

  • QueryBase是所有具体查询实现的基本类型
  • QueryContainer是查询的容器。它用于需要查询的地方。
  • QueryContainerDescriptor<T>是用于构建 QueryContainer 的类型使用构建器/流利的界面模式。

  • NEST 支持 Object Initializer 语法,其中可以通过实例化类型和通过将类型分配给属性来组合对象图来组合请求,还支持 Fluent API 语法,其中可以使用 Lambda 表达式和流畅的接口(interface)模式组合请求。全部 *Descriptor NEST 中的类型是 Fluent API 语法的构建器。使用您喜欢的任何语法,或混合搭配您认为合适的 :)

    你可能会想,我们为什么需要 QueryContainer , 为什么不直接使用 QueryBase ?好吧,在 JSON 表示中,查询 JSON 对象是针对查询名称作为包含 JSON 对象的外部属性的键控,即
    {
    "query": { // <-- start of outer containing JSON object
    "term": { // <-- start of JSON query object
    "field": {
    "value": "value"
    }
    }
    }
    }

    回到 C# 类型, QueryBase将被序列化为查询 JSON 对象和 QueryContainer将是外部包含 JSON 对象。为了更容易编写查询, QueryBase 有隐式转换。至 QueryContainer ,所以通常你只需要实例化一个派生的 QueryBase实现并将其分配给 QueryContainer 类型的属性
    var client = new ElasticClient();

    var termQuery = new TermQuery
    {
    Field = "field",
    Value = "value"
    };

    var searchRequest = new SearchRequest<MyDocument>
    {
    Query = termQuery // <-- Query property is of type QueryContainer
    };

    var searchResponse = client.Search<MyDocument>(searchRequest);

    QueryContainerDescriptor<T> ,您通常不需要在客户端调用之外实例化实例,因为实例将在调用中实例化。这是 Fluent API 的相同请求
    client.Search<MyDocument>(s => s
    .Query(q => q
    .Term("field", "value")
    )
    );

    关于elasticsearch - QueryContainerDescriptor vs QueryContainer vs QueryBase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50653191/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com