如何在ElasticSearch NEST中将原始JSON传递给RegisterPercolator?

时间:2015-05-29 16:46:53

标签: c# json elasticsearch nest elasticsearch-percolate

我正在尝试在C#中创建一个与对象无关的Percolator微服务。我可以使用JSON对象为映射创建和映射传递给我的方法的索引,我甚至可以使用标准的NEST查询格式为索引注册一个过滤器,例如:

var percolateResponse = client.RegisterPercolator<dynamic>(query
    .Name, p=>p
        .Index(index.ActualName)
        .Query(q=>q
            .Term(t=>t
                .OnField("banana")
                .Value("green"))));

问题是,我需要能够传递查询的JSON,并且我一直在尝试使用以下代码:

var percolateResponse = client.RegisterPercolator<dynamic>(query
    .Name, p=>p
        .Index(index.ActualName)
        .Query(q=>q.Raw(query.Context)));

我传递的JSON是:

{"query":
    {"term":
        {"banana":
            {"value": "green"}
        }
    }
}

虽然发生了什么,而不是将指定的查询注册为过滤器查询,它将RegisterPercolatorRequest的查询值设置为null,并且基本上取消查询(如果存在)。

我尝试了许多不同格式的JSON,但没有找到.Query(q=>q.Raw(query.Context))喜欢的内容。

任何人都知道如何解决这个问题吗?我已经越来越接近解决这个问题,但是从来没有完全理解这个问题。这是我创建过滤器代理类的最后一个障碍。任何帮助表示赞赏。感谢。

仅供参考,我得到的错误(在Response对象的深处)是:

[<indexName>] failed to parse query [<queryName>]]; 
nested: QueryParsingException[[<indexName>] [_na] query malformed, 
no field after start_object

我想我已经找到了解决我想要做的事情......以上的查询并没有奏效,但通过一些反复试验,我发现了对象的工作方式 - 不可知查询并注册过滤器:

var percolateResponse = client.RegisterPercolator<dynamic>(query
    .Name, p => p
        .Index(index.ActualName)
        .Query(q => q
            .SimpleQueryString(sqs=>sqs
                .Query(query.Context))));

这会将Query创建为一个简单的查询字符串,并将其存储在ElasticSearch中,当我尝试渗透与该查询匹配的文档时,它似乎可以正常工作!

0 个答案:

没有答案