Elasticsearch NEST API - 查询正确的索引
Elasticsearch NEST API - querying the right index
在 Elasticsearch 上使用 C# NEST API:
var searchResults = client.Search<Product>(s => s
.Index(Constants.ElasticSearchIndex)
.Query(q => q
.Raw(jsonRequest)
)
);
查询应该在 /sc_all/ 索引上 运行,但它在 /sc_all/product/ 索引上 运行(不存在 - / product/ 似乎是由于搜索而添加的,因为 T = product)。
如果我这样做,/product/ 将替换为常量的值,即 /sc_all/product/ => /sc_all/constant_value/:
var searchResults = client.Search<Product>(s => s
.Index(Constants.ElasticSearchIndex)
.Type(Constants.ElasticSearchType)
.Query(q => q
.Raw(jsonRequest)
)
);
如果只想查询/sc_all/,没有别的怎么办?
谢谢!
Json请求:
"{\"filtered\": {\"query\": {\"match_all\": { }},\"filter\": {\"nested\" : { \"path\" : \"products\",\"filter\": {\"nested\" : {\"path\" : \"products.da\",\"filter\" : { \"bool\": { \"must\": [{\"query\": {\"query_string\": {\"default_field\" : \"products.da.content\", \ "query\" : \"kildemoes\"}}}]}}}}}}}}, \"from\": 0, \"size\": 100"
您只需在所有类型中指定 运行 .AllTypes()
var jsonRequest = "{ \"match_all\": {} }";
var searchResults = client.Search<Product>(s => s
.Index(Constants.ElasticSearchIndex)
.AllTypes()
.Query(q => q
.Raw(jsonRequest)
)
);
这将生成以下请求
POST http://localhost:9200/sc_all/_search
{
"query": { "match_all": {} }
}
请记住,任何返回的文档都将尝试反序列化为 Product
的实例,因此如果您要定位多种不同的类型,您可能需要使用通用的基本类型或 dynamic
此外,利用 covariant search results.
您使用的是过时版本的客户端,例如 5.x。
我使用 5.x 也遇到了同样的问题。第二个子路径是文档类型,它是文档的 _type
名称,默认情况下是 docs
。所以,我使用的解决方案是在我的 POCO class 的顶部添加 [ElasticsearchType(Name = "docs")]
并且搜索路径类似于 /{indexname}/docs/_search
,这很好。
在 Elasticsearch 上使用 C# NEST API:
var searchResults = client.Search<Product>(s => s
.Index(Constants.ElasticSearchIndex)
.Query(q => q
.Raw(jsonRequest)
)
);
查询应该在 /sc_all/ 索引上 运行,但它在 /sc_all/product/ 索引上 运行(不存在 - / product/ 似乎是由于搜索而添加的,因为 T = product)。
如果我这样做,/product/ 将替换为常量的值,即 /sc_all/product/ => /sc_all/constant_value/:
var searchResults = client.Search<Product>(s => s
.Index(Constants.ElasticSearchIndex)
.Type(Constants.ElasticSearchType)
.Query(q => q
.Raw(jsonRequest)
)
);
如果只想查询/sc_all/,没有别的怎么办?
谢谢!
Json请求:
"{\"filtered\": {\"query\": {\"match_all\": { }},\"filter\": {\"nested\" : { \"path\" : \"products\",\"filter\": {\"nested\" : {\"path\" : \"products.da\",\"filter\" : { \"bool\": { \"must\": [{\"query\": {\"query_string\": {\"default_field\" : \"products.da.content\", \ "query\" : \"kildemoes\"}}}]}}}}}}}}, \"from\": 0, \"size\": 100"
您只需在所有类型中指定 运行 .AllTypes()
var jsonRequest = "{ \"match_all\": {} }";
var searchResults = client.Search<Product>(s => s
.Index(Constants.ElasticSearchIndex)
.AllTypes()
.Query(q => q
.Raw(jsonRequest)
)
);
这将生成以下请求
POST http://localhost:9200/sc_all/_search
{
"query": { "match_all": {} }
}
请记住,任何返回的文档都将尝试反序列化为 Product
的实例,因此如果您要定位多种不同的类型,您可能需要使用通用的基本类型或 dynamic
此外,利用 covariant search results.
您使用的是过时版本的客户端,例如 5.x。
我使用 5.x 也遇到了同样的问题。第二个子路径是文档类型,它是文档的 _type
名称,默认情况下是 docs
。所以,我使用的解决方案是在我的 POCO class 的顶部添加 [ElasticsearchType(Name = "docs")]
并且搜索路径类似于 /{indexname}/docs/_search
,这很好。