9

我正在通过 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();
    }
}

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

4

1 回答 1

12

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

blog因为你告诉默认索引是blogentries因为它会小写和复数你传递给的类型名称Search<T>

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

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

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

你最可能想要的是:

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

这样 NEST 在/blog/posts/_search

于 2013-04-25T13:46:16.173 回答