我正在尝试做一个简单的搜索,使用nest搜索给定特定客户位置的客户。POCO包括:
class Customer
{
public int CustomerId { get; set; }
public string CustomerName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Identifiers { get; set; }
public string isIndividual { get; set; }
public double Balance { get; set; }
public List<CustomerLocation> Locations { get; set; }
class CustomerLocation
{
public int CustomerLocationId { get; set; }
public string StreetLine1 { get; set; }
public string Streetline2 { get; set; }
public string City { get; set; }
}
目前我正在使用此搜索例程-但它失败了:
var searchResponse = _client.Search<Customer>(s => s
.Query(q => q
.HasChild<CustomerLocation >(hp => hp
.Query(qq => qq
.Match(m => m
.Field(f => f.City )
.Query(queryText)
)
)
)
)
.Size(500)
);
提供的错误消息是:
system.exception hresult=0x80131500 message=搜索无效。错误是:从失败的(400)低级调用生成的无效嵌套响应:/customers/\u search?typed\u keys=true
此api调用的审核跟踪:
[1] 嗅探启动:时间:00:00:00.2448689
[2] 成功:节点:http://localhost:9200/拍摄时间:00:00:00.2288784
[3] pingsuccess:节点:http://127.0.0.1:9200/拍摄时间:00:00:00.0029899
[4] 错误响应:节点:http://127.0.0.1:9200/拍摄时间:00:00:00.1639172
originalexception:elasticsearch.net.elasticsearchclientexception:远程服务器返回错误:(400)错误请求。。呼叫:状态码400来自:post/customers/\u search?typed\u keys=true。servererror:type:search\u phase\u execution\u exception原因:“all shard failed”-->system.net.webexception:远程服务器返回错误:(400)错误请求。
在c:\users\russc\source\elasticsearch net\src\elasticsearch.net\connection\httpwebrequestconnection.cs中的system.net.httpwebrequest.getresponse()处,请求[treresponse](requestdata requestdata):第63行
任何想法-非常感谢。
1条答案
按热度按时间bq3bfh9z1#
客户和地点之间的关系在elasticsearch术语中不是父/子关系,这是使用
has_child
查询。除非显式Map,否则
Locations
上的属性Customer
将是一个object
类型Map,它允许您注:
f => f.Locations.First().City
它只是一个表达式,通过导航对象图,以强类型方式构建到json字段的路径。它不是指“第一个地点的城市”,而是指“任何地点的城市”。这将生成以下查询
但是,对于给定的poco结构,您可能希望跨多个位置属性进行搜索。那样的话,
Locations
应显式Map为nested
数据类型。当Map为嵌套数据类型时,查询将