NEST搜索未找到任何结果

时间:2016-09-02 10:02:43

标签: elasticsearch nest

了解巢穴。我已经在Elastic Search中插入了一些文档。现在我想根据我的类型subcriberId搜索数据。我确实经历了卷曲,它运作得很好。但是当我尝试使用nest时,没有找到结果。

我的卷发工作:

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"))
                            )
                        );

有人能指出我做错了吗?

1 个答案:

答案 0 :(得分:2)

curl请求和NEST查询之间的主要区别在于前者使用query_string查询,后者使用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查询字符串参数来指定查询。