没有Nest的弹性搜索查询

时间:2018-05-15 15:10:31

标签: elasticsearch nest

我厌倦了试图弄清楚如何以我想用的方式查询我的数据 - 它似乎总是推断出错误的网址来发布搜索请求?

无论如何 - 我把这个丑陋的代码放在一起似乎有效:

$("form").submit(function(){
var modal = document.getElementById('myModal');

if ( $(".required").is(":visible") && $('.required').val() == '') {
event.preventDefault();
modal.style.display = "block";
}

// When the user clicks anywhere outside of the modal, close it
window.onclick = function(event) {
    if (event.target == modal) {
      $('#myModal').hide();
    }
}

// When the user clicks on <span> (x), close the modal
span.onclick = function() {
$('#myModal').dialog('close');
}

});

现在,在我开始使它变得更加理智和漂亮之前,查询ES是否有任何问题?

我使用Nest的问题是我无法查看查询通配符索引的方法,您可以看到我可以使用普通的旧C#

如果有人知道最后一点的答案,我将不胜感激!

1 个答案:

答案 0 :(得分:0)

以您提出的方式查询Elasticsearch没有任何问题。 NEST支持查询通配符,单个索引,多个索引,例如

var searchResponse = client.Search<MyDocument>(s => s
    .Index("usage*")
    .AllTypes()
    .Query(q => q
        .MatchAll()
    )
);

发送以下请求

POST http://localhost:9200/usage*/_search
{
  "query": {
    "match_all": {}
  }
}

NEST的惯例是将POCO映射到索引中的类型,并且可以在DefaultMappingFor<T>(...)

上为ConnectionSettings的给定POCO设置约定
var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));

var settings = new ConnectionSettings(pool)
    .DefaultMappingFor<MyDocument>(m => m
        .IndexName("usage*")
    );

var client = new ElasticClient(settings);

var searchResponse = client.Search<MyDocument>(s => s
    .AllTypes()
    .Query(q => q
        .MatchAll()
    )
);

没有约定规定应该为给定的POCO省略类型名称,因此在搜索请求中仍然需要调用.AllTypes()来搜索匹配{{1}的索引中的所有类型}。