弹性搜索不使用Nest返回文档

时间:2016-04-20 15:08:21

标签: c# elasticsearch nest

我对/很新。

我无法使用ElasticSearch搜索我尝试了几种方式,似乎没有什么对我有效。

  

如果我使用sense chrome工具包Sense extension for chrome并查询此ElasticSearch它工作正常。

我已经看过这个answer,也不适合我。

无法使用Nest

进行搜索
GET /employee/_search?q=FirstName="Eldho"

请让我知道我做错了什么。

1 个答案:

答案 0 :(得分:5)

我无法在代码中的任何位置看到您为任何文档编制索引,但我猜测您已将其编入索引。

第一次搜索

    var response = Client.Search<Employee>(s => s
                         .AllIndices()
                         .AllTypes()
                         .From(0)
                         .Size(10)
                         .Query(q =>q
                         .Term(t => t.FirstName, "Eldho")));

因为您使用term "Eldho"查询而未赢得匹配,但默认情况下使用.AutoMap()执行的字段的映射将使用{{} 3}}在string字段上,除其他外,还将包含小写标记。如果您要使用term更改为"eldho"查询,我希望找到匹配项。

您的第二次搜索

   var result = Client.Search<Employee>(h => h
                        .Query(q => q
                            .Match(m => m.Field("FirstName").Query(search))));

将不匹配,因为默认情况下,NEST在索引,映射,搜索等时使用了属性名称。因此,POCO上名为FirstName的属性将映射到映射中名为firstName的字段该文件类型。

您的第三次搜索

    var result2 = Client.Search<Employee>(h => h
                 .Type("employee")
                 .Query(k => k
                 .Term(g => g.FirstName, "Eldho")));

遇到与第一次搜索相同的问题。

在NEST中执行与您在Sense

中发送的查询匹配的查询字符串查询
client.Search<Employee>(s => s
    .Query(q => q
        .QueryString(qs => qs
            .Fields(f => f.Field(ff => ff.FirstName))
            .Query("Eldho")
        )
    )
);

如果您使用问题中的连接设置使用NEST索引文档,那么这应该有效,尽管我在您的Sense查询中注意到您使用字段"FirstName"获得结果。要更改standard analyzer以使其不具有驼峰字段/属性名称,我们可以使用

var settings = new ConnectionSettings(elasticServerUri)
    .DefaultFieldNameInferrer(p => p);

var client = new ElasticClient(settings);