Man*_*ani 16 elasticsearch nest
我正在使用ElasticSearch和我的C#项目中的NEST一起玩.我的用例包括几个具有不同文档类型的索引,到目前为止我分别查询.现在我想实现一个全局搜索功能,它可以查询所有现有索引,文档类型并正确评分结果.
所以我的问题是:如何通过使用NEST实现这一目标?
目前我正在使用该功能,SetDefaultIndex但如何定义多个索引?
也许为了更好地理解,这是我想用NEST实现的查询:
{
"query": {
"indices": {
"indices": [
"INDEX_A",
"INDEX_B"
],
"query": {
"term": {
"FIELD": "VALUE"
}
},
"no_match_query": {
"term": {
"FIELD": "VALUE"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
TIA
Mar*_*man 19
您可以明确告诉NEST使用多个索引:
client.Search<MyObject>(s=>s
.Indices(new [] {"Index_A", "Index_B"})
...
)
Run Code Online (Sandbox Code Playgroud)
如果要搜索所有索引
client.Search<MyObject>(s=>s
.AllIndices()
...
)
Run Code Online (Sandbox Code Playgroud)
或者,如果要搜索一个索引(这不是默认索引)
client.Search<MyObject>(s=>s.
.Index("Index_A")
...
)
Run Code Online (Sandbox Code Playgroud)
请记住,自elasticsearch 19.8起,您还可以在索引名称上指定通配符
client.Search<MyObject>(s=>s
.Index("Index_*")
...
)
Run Code Online (Sandbox Code Playgroud)
至于您的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"))
)
)
);
Run Code Online (Sandbox Code Playgroud)
UPDATE
这些测试展示了如何让C#的协方差为您服务:
在您的情况下,如果所有类型都不是共享库的子类,您仍然可以使用"对象"
即:
.Search<object>(s=>s
.Types(typeof(Product),typeof(Category),typeof(Manufacturer))
.Query(...)
);
Run Code Online (Sandbox Code Playgroud)
这将搜索/yourdefaultindex/products,categories,manufacturers/_search并设置一个默认值ConcreteTypeSelector,该默认值可以理解每个返回文档的类型.
使用ConcreteTypeSelector(Func<dynamic, Hit<dynamic>, Type>)您可以根据某些json值(动态)或命中元数据手动返回类型.
| 归档时间: |
|
| 查看次数: |
12493 次 |
| 最近记录: |