Поиск по диапазону дат в эластичном поиске искаженный запрос

Я пытаюсь интегрировать поиск по диапазону дат с помощью PHP и эластичного поиска.

$params1 = [
'index' => 'joborders',
'type' => 'joborder',
'from' =>0,
'size' => 50,'body' => [

'query' => [
'query_string' => [
'query' => $wildCardString,
'fields' => ['description'],

]
]
]
];

$filter_date=array();
$filter_date['range']['datecreatedsort']['gte']='2015-11-27';
$filter_date['range']['datecreatedsort']['lte']='2017-11-27';
$params1['body']['query']['filtered']['filter']=$filter_date;
$params1['body']['sort']['datecreatedsort']['order'] = 'desc';

try {
$results = $client->search($params1);
//print_r($results);
}
catch (Exception $e) {
$last = $client->transport->getLastConnection()->getLastRequestInfo();
$last['results']['error'] = [];
print_r($last);
}

Когда я выполняю запрос выше, я получаю следующую ошибку

[query_string] неправильно сформированный запрос, ожидается [END_OBJECT], но найден
[FIELD_NAME]», «линии»: 1, «столбец»: 78}, «Статус»: 400}

отображение поля datecreatedsort является типом даты, датой и значением в
БД с эластичным поиском «datecreatedsort»: «2016-05-30T09: 39: 40.000Z»

Пожалуйста, помогите, где проблема в эластичном запросе.

0

Решение

Это родной elasticsearch запрос.

В PHP вам нужно создать массив запросов с той же структурой.

GET /joborders/_search?pretty=true
{
"query": {
"bool": {
"must": [
{
"range": {
"created_at": {
"gte": "2017-11-22 13:49:00",
"lte": "2017-11-22 23:50:00"}
}
}
]
}
}

PS Вам нужно передавать диапазоны дат в том же формате, что и datecreatedsort в дБ («2016-05-30T09: 39: 40.000Z»)

2

Другие решения

попробуй это:

{
"query": {
"filtered": {
"query": {
"query_string": {
"default_field": "description",
"query": $wildCardString
}

},
"filter": {
"range": {
"datecreatedsort": {
"gte": '2015-11-27',
"lte": '2017-11-27'
}
}
}
}
}
}

Ваш код для запроса будет выглядеть примерно так:

$query=array(
'filtered'=>array(
'query' => array(
'query_string' => [
'query' => $wildCardString,
'fields' => ['description'],
]
),
'filter'=>$filter_date
)
);
1

Привет Получил решение его работает нормально

$params1 = [
'index' => 'joborders',
'type' => 'joborder',
'body' => [
'query' => [
'bool' => [
'filter' => [
'range' => [ 'date_modified' => ['gt'=>$duration,'lt'=>$today,'boost'=> '2.0'] ]
],
'must' => [
'match' => [ 'description' => $wildCardString ]
]
]
]
]
];

Спасибо ребята за помощь.

0
По вопросам рекламы [email protected]