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
查询字符串参数来指定查询。
只是了解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
查询字符串参数来指定查询。