我想这意味着我必须描述
Item
和
SearchAgent
中的映射
searchagent
索引。
这对于6.x是正确的。本质上,渗透需要了解将要渗透的文档的映射,因此包含查询的索引也需要具有将要渗透的文档的字段。
对于nest 6.x,可以使用
var client = new ElasticClient();
var createIndexResponse = client.CreateIndex("percolation", c => c
.Mappings(m => m
.Map<SearchAgent>(mm => mm
.AutoMap<SearchAgent>()
.AutoMap<Item>()
)
)
);
这将自动映射两者的属性
搜索代理
和
项目
在地图下面
搜索代理
并将导致以下请求
PUT http://localhost:9200/percolation?pretty=true
{
"mappings": {
"searchagent": {
"properties": {
"id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"userId": {
"type": "keyword"
},
"query": {
"type": "percolator"
}
}
}
}
}
注释
两个POCO上具有相同名称的属性将采用要映射的该名称的最后一个属性的映射,因此建议属性具有相同的映射,或者更好,查询文档包含不同名称的属性。(
Id
如果两者的映射相同,就可以了),以避免潜在的混乱。
随着渗滤指数的建立,目标文件在另一个指数现在可以实现与
var searchResponse = client.Search<SearchAgent>(s => s
.Index("percolation") // index containing queries
.Query(q => q
.Percolate(p => p
.Type<Item>()
.Index("items") // index containing documents
.Id("item-id") // document id
.Field(f => f.Query) // field on SearchAgent containing query
)
)
);
执行以下查询
POST http://localhost:9200/percolation/searchagent/_search
{
"query": {
"percolate": {
"field": "query",
"id": "item-id",
"index": "items",
"type": "item"
}
}
}
您可能还需要为POCO设置约定
ConnectionSettings
var defaultIndex = "default-index";
var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var settings = new ConnectionSettings(pool)
.DefaultIndex(defaultIndex)
.DefaultMappingFor<SearchAgent>(d => d
.IndexName("percolation")
)
.DefaultMappingFor<Item>(d => d
.IndexName("items")
);
var client = new ElasticClient(settings);
然后搜索请求可以使用
var searchResponse = client.Search<SearchAgent>(s => s
.Query(q => q
.Percolate(p => p
.Type<Item>()
.Index<Item>()
.Id("item-id")
.Field(f => f.Query)
)
)
);
最后,看看
NEST Percolation Query DSL documentation
;它当然可以改进,因为它省略了一些在从测试套件自动生成时不包含的信息,但希望它能给您一个想法。对于任何嵌套文档,您始终可以单击“文档”页面上的“编辑”按钮以获取指向原始源的链接,该源是从中生成的:
和
这导致
https://github.com/elastic/elasticsearch-net/blob/6.x/src/Tests/Tests/QueryDsl/Specialized/Percolate/PercolateQueryUsageTests.cs
如果是Percolate 6.x文档。