ElasticSearch NEST搜索多个类型和所有字段

Mat*_*can 13 c# search elasticsearch nest

使用ElasticSearch NEST,我无法从查询中获得预期的结果.我的索引/类型布局如下:

  • 剧院(指数)
    • 事件(类型)
    • 剧院
    • 提升
    • 通用内容

每种类型都有自己的字段,我使用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);
Run Code Online (Sandbox Code Playgroud)

查询

现在,对于查询,我想搜索索引中的所有类型和所有字段.使用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))))));
Run Code Online (Sandbox Code Playgroud)

但是,这给了我不同的结果.NEST是否在幕后做了我不知道的事情?或者这不受支持?

Dan*_*ing 18

您的查询丢失了 .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))))));
Run Code Online (Sandbox Code Playgroud)