如何使用NEST API搜索数据?

时间:2017-02-01 09:12:26

标签: c# elasticsearch nest

我有ElasticSearch客户端,它有默认设置。

elasticClient = new ElasticLowLevelClient();

我也有一个简单的帖子实体。

[ElasticsearchType(IdProperty = "Id", Name = "post")]
    public class Post
    {
        [Number(Name = "id")]
        public int Id { get; set; }
        [Text(Name = "title")]
        public string Title { get; set; }
        [Text(Name = "description")]
        public string Description { get; set; }
    }

我想执行类似于Es文档查询的查询:

var searchResults = client.Search<Post>(p=>p
    .From(0)
    .Size(10)
    .Query(q=>q
         .Term(p=>p.Title, "stackoverflow")
    )
);

但我认为ES API已经改变了。第一个参数应该是PostData。这就是为什么我不知道我的查询应该如何。

我的ElasticSearch版本是2.3.5 NEST的版本是5.0.1

也许我需要较低版本的NEST?

1 个答案:

答案 0 :(得分:1)

您正在从$deals = Deals::where('deals_providers', $provider)->where('deal_types', $dealType)->with('meta') ->where(function ($query) use ($terms, $dealType) { $query->whereHas('meta', function ($query) use ($terms, $dealType) { if ($terms['location']) { $query->where('location', 'like', '%' . $terms['location'] . '%'); } if ($terms['price_from'] && $terms['price_to']) { $query->whereBetween('price', [$terms['price_from'], $terms['price_to']]); } if ($terms['departs_from']) { $query->where('departs_from', 'like', '%' . $terms['departs_from'] . '%'); } if ($terms['duration']) { $query->where('duration', 'like', '%' . $terms['duration'] . '%'); } if ($terms['available_start']) { $query->where('available_start', 'like', '%' . $terms['available_start'] . '%'); } if ($terms['available_end']) { $query->where('available_end', 'like', '%' . $terms['available_end'] . '%'); } }); if ($terms['title']) { $query->orWhere('title', 'like', '%' . $terms['title'] . '%'); } if ($terms['details']) { $query->orWhere('details', 'like', '%' . $terms['details'], '%'); } })->get(); Debug::data($deals); 实例化low level client的实例。

如果您改为使用NEST的高级客户端,那么一切都会很好

Elasticsearch.Net

在内部,NEST使用低级别客户端,这就是var elasticClient = new ElasticClient(); 作为依赖项引入的原因。