下面的代码将生成一个包含POCO名称的uri
(https://demo.com/query/slug1/myIndexName/myPoco/_search
)。
我需要的只是https://demo.com/query/slug1/myIndexName/_search
var node = new Uri("https://demo.com/query/slug1/");
var settings = new ConnectionSettings(node, defaultIndex: "myIndexName");
int skipCount = 0;
int takeSize = 100;
var client = new ElasticClient(settings);
do
{
var searchResults = client.Search<myPoco>(x => x.Index("myIndexName")
.Query(q => q
.Bool(b => b
.Must(m =>
m.Match(mt1 => mt1.OnField(f1 => f1.status).Query("New")))))
.Skip(skipCount)
.Take(takeSize));
foundStuff = (List<myPoco>)searchResults.Documents;
foreach (foundThing item in searchResults.Documents)
{
//DO stuff
}
skipCount = skipCount + takeSize;
} while (foundStuff.Count == 100);
我错过了一些简单的东西,还是这个AFU?
答案 0 :(得分:0)
不是AFU :) NEST will infer the type name要包含在传递给Search<T>()
的通用参数类型的URI中。您可以使用.AllTypes()
var searchResults = client.Search<myPoco>(x => x
.Index("myIndexName")
// specify all types
.AllTypes()
.Query(q => q
.Bool(b => b
.Must(m =>
m.Match(mt1 => mt1.OnField(f1 => f1.status).Query("New")))))
.Skip(skipCount)
.Take(takeSize)
);
请注意,现在这将搜索索引中的所有类型,并尝试将每个类型反序列化为myPoco
类型。
在回复您的评论时,index
和type
是两个不同的概念,因此如果您将类型命名为与索引相同,则仍会获得~/{index}/{type}/_search
。与NEST
您可以在连接设置
上为.MapDefaultTypeIndices()
的类型映射默认索引
var settings = new ConnectionSettings(new Uri("http://localhost:9200"))
.MapDefaultTypeIndices(d => d.Add(typeof(myPoco), "myIndexName"));
同样,您可以映射类型的默认类型名称
var settings = new ConnectionSettings(new Uri("http://localhost:9200"))
.MapDefaultTypeNames(d => d.Add(typeof(myPoco), "myType"));
您可以滥用来将string.Empty
映射为您的类型的默认类型名称,以获取您想要的URI