您可以明确告诉 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"))
)
)
);
更新
这些测试展示了如何使 C# 的协方差为您工作:
https://github.com/Mpdreamz/NEST/blob/master/src/Nest.Tests.Integration/Search/SubClassSupport/SubClassSupportTests.cs
在您的情况下,如果所有类型都不是共享基础的子类,您仍然可以使用“对象”
IE:
.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 值(动态)或命中元数据的类型。