ElasticSearch 查询不起作用
ElasticSearch query doesn't work
我有以下文件:
{
"_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);
但我在尝试获取包含 'world'.
的文档时一无所获
var hits = elasticClient.Search<DalTask>(s => s
.Type("tasks")
.Query(q => q
.Match(m => m
.Field(p => p.Title).Query("world")
)
)
).Hits;
我的错误在哪里?
P.s。我的索引设置为默认 "taskmanager"。
默认情况下,NEST camel 在将请求中的 Elasticsearch 文档字段名称序列化时使用 C# POCO 属性 名称,因此
.Field(p => p.Title)
变成
"title"
在请求中。查看您发布的回复中的 _source
,您的字段名称似乎是 Pascal-cased,因此搜索请求中字段名称的大小写不同,将不匹配。
您可以通过在 ConnectionSettings
上更改 .DefaultFieldNameInferrer(Func<string, string>)
来更改 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);
我有以下文件:
{
"_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);
但我在尝试获取包含 'world'.
的文档时一无所获var hits = elasticClient.Search<DalTask>(s => s
.Type("tasks")
.Query(q => q
.Match(m => m
.Field(p => p.Title).Query("world")
)
)
).Hits;
我的错误在哪里? P.s。我的索引设置为默认 "taskmanager"。
默认情况下,NEST camel 在将请求中的 Elasticsearch 文档字段名称序列化时使用 C# POCO 属性 名称,因此
.Field(p => p.Title)
变成
"title"
在请求中。查看您发布的回复中的 _source
,您的字段名称似乎是 Pascal-cased,因此搜索请求中字段名称的大小写不同,将不匹配。
您可以通过在 ConnectionSettings
.DefaultFieldNameInferrer(Func<string, string>)
来更改 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);