ElasticSearch查询不起作用

时间:2017-02-01 14:47:06

标签: c# elasticsearch nest

我有以下文件:

{
        "_index": "taskmanager",
        "_type": "tasks",
        "_id": "AVn4vhIKiS68kYrc2Xp0",
        "_score": 0.8784157,
        "_source": {
          "Id": 2,
          "Title": "Hello World",
          "Description": "Description example",
          "PublishDate": "2017-01-29T15:06:04",
          "IsCompleted": true
        }

我可以获得执行查询的文档列表:

var hits = elasticClient.Search<Task>(s => s);

但我没有尝试获取包含“世界”的文件。

var hits = elasticClient.Search<DalTask>(s => s
                .Type("tasks")
                .Query(q => q
                    .Match(m => m
                        .Field(p => p.Title).Query("world")
                    )
                )
            ).Hits;

我的错误在哪里? 附:我的索引设置为默认“taskmanager”。

1 个答案:

答案 0 :(得分:1)

默认情况下,NEST驼峰案例C#POCO属性名称在将它们序列化为请求中的Elasticsearch文档字段名称时,所以

.Field(p => p.Title)

变为

"title"

在请求中。查看您发布的响应中的_source,看起来您的字段名称是Pascal,因此搜索请求中字段名称的大小不同且不匹配。

您可以通过更改.DefaultFieldNameInferrer(Func<string, string>)上的ConnectionSettings来更改NEST序列化C#POCO属性名称的方式

var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var connectionSettings = new ConnectionSettings(pool)
    // serialize POCO property names verbatim
    .DefaultFieldNameInferrer(s => s);

var client = new ElasticClient(connectionSettings);