Nest Elastic Search.net不会通过任何查询返回任何结果



我已经创建了一个我很满意的索引,并且正在尝试在Nest客户端中实现键入查询:

  1. var node = new Uri("http://elasticsearch-blablablamrfreeman");

        var settings = new ConnectionSettings(node)
            .SetTimeout(300000)
            .SetDefaultIndex("films")
            .MapDefaultTypeIndices(d => d
                .Add(typeof(film), "films"))
                .SetDefaultPropertyNameInferrer(p=>p);
    
  2. 用我的di注入(搜索者和索引器):

    builder.Register(c => new ElasticClient(settings)).Named<ElasticClient>("esclient");
    
  3. 使用任何查询搜索,例如以下查询:

    var result = _client.Search<film>(s => s .allindices() .from(0) .size(10) .query(q => q .term(p => p.title,查询) );

索引器似乎工作正常,因此此处未包括代码。我已经互换了任何数量的设置参数,所以我知道上面的代码中有一些冗余(或至少默认索引就足够了)。

结果VAR一无所有,尽管我在索引上有大量数据(包括"电影"索引),但在所有属性中都有大脂肪0。

我什至尝试了使用gerager的原始QueryRaw方法和NADA!

编辑(克里斯·普拉特(Chris Pratt)沿着正确的行)

运行:

var result = _client.Search<film>(s => s
        .From(0)
        .Size(10)
        .QueryRaw(@"{ ""match_all"": {} }"));

和:

        var settings = new ConnectionSettings(node)
            .SetTimeout(300000)
            .MapDefaultTypeIndices(d => d
                .Add(typeof (film), "chosen_index"))
            .MapDefaultTypeNames(t => t
                .Add(typeof (film), "en"));

返回调试信息为:

[Elasticsearch.Net.ElasticsearchResponse<Nest.SearchResponse<film>>] = {StatusCode: 200, 
    Method: POST, 
    Url: http://elasticsearch-blablablamrfreeman/chosen_index/film/_search, 
    Request: {
  "from": 0,
  "size": 10,
  "query": { "match_all": {} }
}, 
    Response: <Response stream not captured or already read...

我的问题是:实际上,我实际上是在根据克里斯·普拉特(Chris Pratt)的评论来查询错误的URL,但是为什么类型不适合该类型,而是用于索引?

/chosen_index/film/_search

应该阅读

/chosen_index/en/_search

如果我的推断是正确的。

应该发布还是得到?我通常会通过搜索API获得。最后,如果我想对我的本地电影类型写我的疑问,但在某些情况下它将其覆盖URL中的ES-Type怎么办。

例如,如果我注入不同的语言参数并希望现在查询相同的索引,但" en"one_answers" de" es-types等(它们都是与已经通过Sense构建的相同索引下的有效类型)。

预先感谢!

没有什么显而易见的是为什么这对您不起作用。但是,我可以为您提供一些试图解决这个问题的途径。

  1. 我不熟悉您正在使用的特定DI容器,但是它可能没有正确绑定,从而导致您在创建的实例中实际上未使用某些设置选项。可能是一个漫长的镜头,但我建议您进行挖掘,至少验证您要获得的客户端实例是否应按照应有的方式进行设置。

  2. 它在某种程度上将问题置于问题,但是Elasticsearch明确建议您不要通过不同类型来处理本地化。您应该使用不同的索引,即chosen_index_enchosen_index_es等,或使用多场:

    "title": {
        "type": "string",
        "fields": {
            "en": {
                "type": "string",
                "analyzer": "english"
            },
            "es": {
                "type": "string",
                "analyzer": "spanish"
            }
        }
    

    然后,您可以在title.entitle.es

  3. 上搜索

我看到您正在使用胶片类型的默认映射。也就是说,在索引之前,标准分析仪对数据进行分析。

在查询中,您使用的是术语查询,该查询查找包含 exact term(未分析)的文档(请参见此处)。因此,请小心您的查询是。

尝试使用下面的匹配查询:

var result = _client.Search<film>(s => s
    .AllIndices()
    .From(0)
    .Size(10)
    .Query(q => q
    .Match(p => p.Title, query)
));

查询现在由标准分析仪在应用之前分析(请参见此处)。

相关内容

最新更新