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,这很好。