ElasticSearch NEST 搜索多种类型和所有字段
ElasticSearch NEST Search Multiple Types & All Fields
使用 ElasticSearch NEST,我无法从查询中获得预期的结果。我的index/type布局如下:
- 剧院(索引)
- 事件(类型)
- 剧院
- 晋升
- 一般内容
每种类型都有自己的字段,我正在使用 NEST 的 Index() 方法来索引数据。我可以通过以下方式验证它是否被正确索引:
- 正在查看
http://localhost:9200/theatres/_mapping
- 使用Head插件查看数据
作为参考,这是我的客户端配置:
// 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);
查询
现在,对于查询,我想在索引中搜索 all 类型和 all 字段。使用 Head 插件,我能够生成查询并获得预期结果:
使用它生成的查询,我尝试了以下 NEST 查询:
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))))));
然而,这给了我不同的结果。 NEST 是否在幕后做了一些我不知道的事情?还是不支持?
您的查询缺失.AllTypes()
您还可以使用 .Types("type1", "type1")
指定多个类型
所以:
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))))));
使用 ElasticSearch NEST,我无法从查询中获得预期的结果。我的index/type布局如下:
- 剧院(索引)
- 事件(类型)
- 剧院
- 晋升
- 一般内容
每种类型都有自己的字段,我正在使用 NEST 的 Index() 方法来索引数据。我可以通过以下方式验证它是否被正确索引:
- 正在查看
http://localhost:9200/theatres/_mapping
- 使用Head插件查看数据
作为参考,这是我的客户端配置:
// 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);
查询
现在,对于查询,我想在索引中搜索 all 类型和 all 字段。使用 Head 插件,我能够生成查询并获得预期结果:
使用它生成的查询,我尝试了以下 NEST 查询:
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))))));
然而,这给了我不同的结果。 NEST 是否在幕后做了一些我不知道的事情?还是不支持?
您的查询缺失.AllTypes()
您还可以使用 .Types("type1", "type1")
所以:
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))))));