我有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?
答案 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();
作为依赖项引入的原因。