内部点击不起作用ElasticSearch

时间:2018-07-06 14:36:18

标签: elasticsearch nest

美好的一天:

我正在使用ElasticSearch / NEST来查询嵌套对象。我意识到的是我的嵌套对象为空,尽管现在存在匹配,但仍返回了父对象。

ISearchResponse<Facility> responses = await this._elasticClient.SearchAsync<Facility>(a => a.Query(q =>
                  q.Bool(b =>
                            b.Must(m =>
                                m.Nested(n =>
                                    n.Query(nq =>
                                            nq.Term(t =>t.Field(f => f.Reviews.First().UserId).Value(user.Id))
                                            ).InnerHits(ih => ih.From(0).Size(1).Name("UserWithReview"))
                                 )
                             )
                       )

            ));

当我查看生成的查询时,我更加困惑正在发生的事情:

Successful low level call on POST: /dev/doc/_search?typed_keys=true
# Audit trail of this API call:
 - [1] HealthyResponse: Node: http://localhost:9200/ Took: 00:00:00.9806442
# Request:
{}

如您所见,请求为空。

1 个答案:

答案 0 :(得分:1)

您尚未使用所需的所有属性定义嵌套查询;它缺少Path属性,该属性告诉Elasticsearch在哪个文档字段(即路径)上执行查询。查看查询的其余部分,看起来应该是Reviews属性

ISearchResponse<Facility> responses =
    await this._elasticClient.SearchAsync<Facility>(a => a
        .Query(q => q
            .Bool(b => b
                .Must(m => m
                    .Nested(n => n
                        .Path(f => f.Reviews) // <-- missing
                        .Query(nq => nq
                            .Term(t => t
                                .Field(f => f.Reviews.First().UserId)
                                .Value(user.Id)
                            )
                        )
                        .InnerHits(ih => ih.From(0).Size(1).Name("UserWithReview"))
                    )
                )
            )
        )
    );