【问题标题】:ElasticSearch NEST client not returning resultsElasticSearch NEST 客户端不返回结果
【发布时间】:2013-03-31 00:25:15
【问题描述】:

我正在通过 ElasticSearch NEST C# 客户端运行一个简单的查询。当我通过 http 运行相同的查询时收到结果,但从客户端返回的文档为零。

这就是我填充数据集的方式:

curl -X POST "http://localhost:9200/blog/posts" -d @blog.json

这个 POST 请求返回一个 JSON 结果:

http://localhost:9200/_search?q=adipiscing

这是我没有返回任何内容的代码。

public class Connector
{
    private readonly ConnectionSettings _settings;
    private readonly ElasticClient _client;

    public Connector()
    {
        _settings = new ConnectionSettings("localhost", 9200);
        _settings.SetDefaultIndex("blog");
        _client = new ElasticClient(_settings);
    }

    public IEnumerable<BlogEntry> Search(string q)
    {
        var result =
            _client.Search<BlogEntry>(s => s.QueryString(q));

        return result.Documents.ToList();
    }
}

我错过了什么?提前谢谢..

【问题讨论】:

    标签: c# elasticsearch nest


    【解决方案1】:

    NEST 尝试猜测类型和索引名称,在您的情况下它将使用 /blog/blogentries

    blog 因为你告诉默认索引是和blogentries 因为它将小写和复数你传递给Search&lt;T&gt; 的类型名称。

    你可以像这样控制类型和索引:

     .Search<BlogEntry>(s=>s.AllIndices().Query(...));
    

    这会让 NEST 知道您实际上想要搜索所有索引,因此 nest 会将其转换为根目录上的 /_search,与您在 curl 上发出的命令相同。

    你最可能想要的是:

     .Search<BlogEntry>(s=>s.Type("posts").Query(...));
    

    这样 NEST 在 /blog/posts/_search 中搜索

    【讨论】:

    • 谢谢,我一直在努力解决这个问题,因为我的模型名称与索引名称不匹配。此外,如果使用 Object Initializer Syntax(我猜它默认为所有索引),则不会推断索引名称。有办法让它更明显会很好。 (我想说“显式优于隐式”的原则在这里适用)
    • 即使您使用对象初始化器语法,它也不应该默认为所有索引,介意在 github 上用您的代码外观打开一张票吗?
    猜你喜欢
    • 2023-03-30
    • 2017-12-22
    • 2015-03-21
    • 1970-01-01
    • 2019-09-07
    • 2018-03-01
    • 2020-12-22
    • 2015-11-19
    • 2023-03-04
    相关资源
    最近更新 更多