NEST 搜索未找到任何结果

NEST Search not found any result

只是了解nest。我已经在 Elastic Search 中插入了一些文档。现在我想根据我的类型 subcriberId 搜索数据。我通过 curl 做了 运行,它工作得很好。但是当我尝试使用 nest 时,没有找到结果。

我的 curl 有效:

http://localhost:9200/20160902/_search?q=subscribeId:aca0ca1a-c96a-4534-ab0e-f844b81499b7

我的 NEST 代码:

        var local = new Uri("http://localhost:9200");
        var settings = new ConnectionSettings(local);
        var elastic = new ElasticClient(settings);

        var response = elastic.Search<IntegrationLog>(s => s
                            .Index(DateTime.Now.ToString("yyyyMMdd"))
                            .Type("integrationlog")
                            .Query(q => q
                                .Term(p => p.SubscribeId, new Guid("aca0ca1a-c96a-4534-ab0e-f844b81499b7"))
                            )
                        );

谁能指出我做错了什么?

您的 curl 请求和您的 NEST 查询之间的一个主要区别是前者使用 query_string query and the latter, a term 查询。 query_string 查询输入在查询时进行分析,而 term 查询输入则不会,因此根据 subscribeId 的分析方式(或不分析),您可能会看到不同的结果。此外,您的 curl 请求正在搜索索引 20160902.

中的所有文档类型

在 NEST 中执行与您的 curl 请求完全相同的查询

void Main()
{
    var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
    var connectionSettings = new ConnectionSettings(pool)
        // set up NEST with the convention to use the type name
        // "integrationlog" for the IntegrationLog
        // POCO type
        .InferMappingFor<IntegrationLog>(m => m
            .TypeName("integrationlog")
        );

    var client = new ElasticClient(connectionSettings);

    var searchResponse = client.Search<IntegrationLog>(s => s
        .Index("20160902")
        // search across all types. Note that documents found
        // will be deserialized into instances of the 
        // IntegrationLog type
        .AllTypes()
        .Query(q => q
            // use query_string query
            .QueryString(qs => qs
                .Fields(f => f
                    .Field(ff => ff.SubscribeId)
                )
                .Query("aca0ca1a-c96a-4534-ab0e-f844b81499b7")
            )
        )
    );
}

public class IntegrationLog
{
    public Guid SubscribeId { get; set; }
}

这会产生

POST http://localhost:9200/20160902/_search 
{
  "query": {
    "query_string": {
      "query": "aca0ca1a-c96a-4534-ab0e-f844b81499b7",
      "fields": [
        "subscribeId"
      ]
    }
  }
}

这在请求正文中指定了query_string查询,这类似于使用q查询字符串参数来指定查询。