了解巢穴。我已经在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"))
)
);
有人能指出我做错了吗?
答案 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
查询字符串参数来指定查询。