我正在尝试使用NEST(.NET elasticsearch wrapper)查询以下实体:
public class TourIndex
{
public Guid ProductId { get; set; }
public Guid[] Periodes { get; set; }
public Guid[] Countries { get; set; }
...
}
我想得到所有TourIndex对象,其中一个国家是guid x。
我的索引是正确的,我可以在浏览http://localhost:9200/my-index/_search?pretty=true&q=*:*
时看到我的TourIndex对象
我的查询尝试是:
System.Func<QueryDescriptor<TourIndex>, QueryContainer> elasticSearchQuery = (q => q.Term(x => x.Countries.First(), myGuidX));
var client = ElasticSearchHelper.CreateNestClient();
var searchResponse = client.Search<TourIndex>(s => s.Query(elasticSearchQuery));
return searchResponse.Documents;
不幸的是我没有结果。响应有效但不返回任何文档。我已经进行了双重检查,我的索引中有一个有效的TourIndex,它有我的国家guid。
索引对象的示例:
{
"_index" : "my-index",
"_type" : "tour",
"_id" : "WRAG141004",
"_score" : 1.0,
"_source":{
"erpTourId": "SNG141004",
"productId": "9d28694e-d705-e411-93f9-00155d01210a",
"countries": [
"01cad5a4-caf4-4d01-88e7-936c0827b13e"
],
"productType": "88e436ff-d605-e411-93f9-00155d01210a",
"subProductType": "ece1fa1b-d705-e411-93f9-00155d01210a",
"dayCount": 8,
"price": 7852,
"groupCount": 0,
"isPromotion": true,
"composition": []
}
所以myGuidX可以是"01cad5a4-caf4-4d01-88e7-936c0827b13e"
例如。
分析器/贴图:
{
"live-to-travel-index": {
"mappings": {
"tour": {
"properties": {
"available": {
"type": "long"
},
"booked": {
"type": "long"
},
"capacity": {
"type": "long"
},
"composition": {
"type": "string"
},
"countries": {
"type": "string"
},
"dayCount": {
"type": "long"
},
"globusTourId": {
"type": "string"
},
"groupCount": {
"type": "long"
},
"isPromotion": {
"type": "boolean"
},
"options": {
"type": "long"
},
"periodes": {
"type": "string"
},
"price": {
"type": "long"
},
"productId": {
"type": "string"
},
"productType": {
"type": "string"
},
"queue": {
"type": "long"
},
"subProductType": {
"type": "string"
}
}
}
}
}
}
我没有在c#中配置任何内容,我认为这是默认的。
我找到了问题的解决方案,但我认为这是一种不好的做法。
此代码为我提供了结果:
elasticSearchQuery = (q => q.Match(m => { m.Query("*" + query.CountryId.Value.ToString() + "*"); }));
var client = ElasticSearchHelper.CreateNestClient();
var searchResponse = client.Search<TourIndex>(s => s.Query(elasticSearchQuery));
我的猜测是通配符会降低性能。
答案 0 :(得分:0)
您能提供有关guid格式,字段映射和分析器的一些详细信息吗?可能没有像您期望的那样搜索/分析这些值。另外,你安装了Kibana / Kopf吗?