C# ElasticSearch嵌套搜索多种类型&;所有领域
使用ElasticSearch NEST,我很难从查询中获得预期的结果。我的索引/类型布局如下:C# ElasticSearch嵌套搜索多种类型&;所有领域,c#,search,
elasticsearch,nest,C#,Search,
elasticsearch,Nest,使用ElasticSearch NEST,我很难从查询中获得预期的结果。我的索引/类型布局如下: 剧院(索引) 事件(类型) 剧院 晋升 一般内容 每种类型都有自己的字段,我使用NEST的Index()方法对数据进行索引。我可以通过以下方式验证它是否被正确索引: 查看http://localhost:9200/theatres/_mapping 使用插件查看数据 以下是我的客户端配置,仅供参考: // TODO: Put settings in config var node = n
- 剧院(索引)
- 事件(类型)
- 剧院
- 晋升
- 一般内容
- 查看
http://localhost:9200/theatres/_mapping
- 使用插件查看数据
// TODO: Put settings in config
var node = new Uri("http://localhost:9200");
var connSettings = new ConnectionSettings(node);
connSettings.SetDefaultIndex("theatres");
connSettings.ThrowOnElasticsearchServerExceptions();
var client = new ElasticClient(connSettings);
查询
现在,对于查询,我想搜索索引中的所有类型和所有字段。使用Head插件,我能够生成查询并获得预期结果:
使用它生成的查询,我尝试了以下嵌套查询:
var query = "waukesha"; // This would be passed in
var resp = client.Search<dynamic>(s => s
.From(0)
.Take(10)
.Query(qry => qry
.Bool(b => b
.Must(m => m
.QueryString(qs => qs
.DefaultField("_all")
.Query(query))))));
var query=“waukesha”//这将被传递进来
var resp=client.Search(s=>s
.从(0)
.Take(10)
.Query(qry=>qry
.Bool(b=>b
.Must(m=>m
.QueryString(qs=>qs
.DefaultField(“全部”)
.查询(查询(()())));
然而,这给了我一个不同的结果。NEST在幕后做了我不知道的事情吗?或者这不受支持?您的查询缺少
.AllTypes()
您还可以使用.types(“type1”、“type1”)
因此:
var query=“waukesha”//这将被传递进来
var resp=client.Search(s=>s
.AllTypes()
.从(0)
.Take(10)
.Query(qry=>qry
.Bool(b=>b
.Must(m=>m
.QueryString(qs=>qs
.DefaultField(“全部”)
.查询(查询(()())));
我建议使用.Size(10)而不是.Take(20),只是为了将其作为错误变量删除,尽管功能应该相同。此外,我相信您可以删除.DefaultField,并将搜索所有字段。你能试试吗?我很好奇this@DanielHoffmann-Mitscherling我更新了这个,结果仍然是0,而我应该得到1。真奇怪!您能否重新添加DefaultField(“\u all”)并添加.AllTypes()?手动强制NEST创建具有所有类型的查询可能会给我们带来更多好处info@DanielHoffmann-米舍林成功了!测试之后,我将其更改为.AllTypes()
,这也可以使用。现在我想知道我是否可以简化这个问题?@DanielHoffmann Mitscherling绝对!谢谢我们可以在这里使用基于类型的术语过滤器吗。示例:两种类型:“type1”、“type2”type1有:name、locationid,type2有:countryid和stateid使用此选项如何在此处实现基于类型的术语筛选?@MohanGopi--Yes:.type().type()
var query = "waukesha"; // This would be passed in
var resp = client.Search<dynamic>(s => s
.AllTypes()
.From(0)
.Take(10)
.Query(qry => qry
.Bool(b => b
.Must(m => m
.QueryString(qs => qs
.DefaultField("_all")
.Query(query))))));