我正在升级到 NEST 2.3.0 并尝试重写最初为 NEST 1.x 编写的所有查询。我正在使用将数据从 Couchbase 推送到 Elasticsearch 的 Couchbase 传输插件。
POCO
public class Park
{
public Park()
{
}
public bool IsPublic { get; set; }
}
映射是这样的
"mappings": {
"park": {
"_source": {
"includes": [
"doc.*"
],
"excludes": [
"meta.*"
]
},
"properties": {
"meta": {
"properties": {
"rev": {
"type": "string"
},
"flags": {
"type": "long"
},
"expiration": {
"type": "long"
},
"id": {
"type": "string",
"index": "not_analyzed"
}
}
},
"doc": {
"properties": {
"isPublic": {
"type": "boolean"
}
}
}
}
}
}
elasticsearch中的示例文档
{
"_index": "parkindex-local-01",
"_type": "park",
"_id": "park_GUID",
"_source": {
"meta": {
"expiration": 0,
"flags": 33554433,
"id": "park_GUID",
"rev": "1-1441a2c278100bc00000000002000001"
},
"doc": {
"isPublic": true,
"id": "park_GUID"
}
}
}
我在 NEST 中的查询
var termQuery = Query<Park>.Term(p => p.IsPublic, true);
ISearchResponse<T> searchResponse = this.client.Search<T>(s => s.Index("parkindex-local-01")
.Take(size)
.Source(false)
.Query(q => termQuery));
此查询转到 Elasticsearch,如下所示
{
"size": 10,
"_source": {
"exclude": [
"*"
]
},
"query": {
"term": {
"isPublic": {
"value": "true"
}
}
}
}
它不检索任何数据,只有当我在字段名称前加上“doc”前缀时它才会起作用。所以查询变成如下
{
"size": 10,
"_source": {
"exclude": [
"*"
]
},
"query": {
"term": {
"doc.isPublic": {
"value": "true"
}
}
}
}
如何在 NEST 中编写上面的查询,以便它可以正确解释字段名称,我尝试使用路径设置为“doc”的嵌套查询,但这给出了一个错误,指出字段不是嵌套类型。
我需要更改我的映射吗?
这一切都曾经在 Elasticsearch 1.x 和 NEST 1.x 中工作,我想这与对字段名称约束的破坏性更改有关。