我玩弄ElasticSearch结合窝在我的C#项目。 我的使用情况包括几个指数与我单独查询迄今不同的文件类型。 现在,我想实现它询问对所有现有索引进行全局搜索功能,文档类型和正确比分结果。
所以我的问题:如何实现通过使用NEST?
目前我使用的功能SetDefaultIndex
但我怎么可以定义多个指标?
也许为了更好地理解,这是查询我想与NEST实现:
{
"query": {
"indices": {
"indices": [
"INDEX_A",
"INDEX_B"
],
"query": {
"term": {
"FIELD": "VALUE"
}
},
"no_match_query": {
"term": {
"FIELD": "VALUE"
}
}
}
}
}
TIA
你可以明确地告诉NEST使用多个指标:
client.Search<MyObject>(s=>s
.Indices(new [] {"Index_A", "Index_B"})
...
)
如果你想在所有的索引搜索
client.Search<MyObject>(s=>s
.AllIndices()
...
)
或者,如果你要搜索一个索引(那不是默认的索引)
client.Search<MyObject>(s=>s.
.Index("Index_A")
...
)
因为elasticsearch 19.8记住,你也可以指定索引名通配符
client.Search<MyObject>(s=>s
.Index("Index_*")
...
)
至于你indices_query
client.Search<MyObject>(s=>s
.AllIndices()
.Query(q=>q
.Indices(i=>i
.Indices(new [] { "INDEX_A", "INDEX_B"})
.Query(iq=>iq.Term("FIELD","VALUE"))
.NoMatchQuery(iq=>iq.Term("FIELD", "VALUE"))
)
)
);
UPDATE
这些测试炫耀你如何让C#的你协方差工作:
https://github.com/Mpdreamz/NEST/blob/master/src/Nest.Tests.Integration/Search/SubClassSupport/SubClassSupportTests.cs
在你的情况下,如果所有的类型不共享基地的子类,你仍然可以使用“对象”
即:
.Search<object>(s=>s
.Types(typeof(Product),typeof(Category),typeof(Manufacturer))
.Query(...)
);
这将搜索上/yourdefaultindex/products,categories,manufacturers/_search
和设置默认ConcreteTypeSelector
能理解什么类型,每个返回文档。
使用ConcreteTypeSelector(Func<dynamic, Hit<dynamic>, Type>)
可以手动返回基于一些JSON值(动态)的类型或对命中元数据。
文章来源: NEST: How to query against multiple indices and handle different subclasses (document types)?