NEST:如何查询多个索引并处理不同的子类(文档类型)?

我在C#项目中将ElasticSearch与NEST结合使用。我的用例包括多个具有不同文档类型的索引,到目前为止,我分别对其进行了查询。现在,我想实现一个全局搜索功能,该功能可以对所有现有索引,文档类型进行查询并正确地对结果进行评分。

所以我的问题是:如何使用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_*")

...

)

至于你的indexs_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

在您的情况下,如果所有类型都不是共享库的子类,您仍然可以使用“对象”

即:

 .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:如何查询多个索引并处理不同的子类(文档类型)? 的全部内容, 来源链接: utcz.com/qa/415609.html

回到顶部