首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性搜索格式错误查询中的按日期搜索

弹性搜索格式错误查询中的按日期搜索
EN

Stack Overflow用户
提问于 2017-11-27 17:26:06
回答 3查看 1K关注 0票数 0

我正在尝试将按日期范围的搜索与PHP和弹性搜索相结合

代码语言:javascript
复制
$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","line":1,"col":78},"status":400} 数据排序字段映射为日期类型为日期,弹性搜索数据库中的值为“数据关联排序”:“2016-05-30T09:39:40.000Z”

请帮助弹性查询中的问题在哪里。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-04 15:07:55

嗨,找到解决办法了,效果很好

代码语言:javascript
复制
$params1 = [
'index' => 'joborders',
'type' => 'joborder',
'body' => [
    'query' => [
        'bool' => [
            'filter' => [
                'range' => [ 'date_modified' => ['gt'=>$duration,'lt'=>$today,'boost'=> '2.0'] ]
            ],
            'must' => [
                'match' => [ 'description' => $wildCardString ]
            ]
        ]
    ]
 ]
];

谢谢你们的帮助。

票数 1
EN

Stack Overflow用户

发布于 2017-11-27 21:54:40

这是本机elasticsearch请求。

PHP中,您需要创建具有相同结构的数组查询。

代码语言:javascript
复制
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您需要以与db中的datecreatedsort格式相同的格式传递日期范围("2016-05-30T09:39:40.000Z")

票数 2
EN

Stack Overflow用户

发布于 2017-11-27 21:39:28

试试这个:

代码语言:javascript
复制
{
    "query": {
      "filtered": {
        "query": {
          "query_string": {
            "default_field": "description",
            "query": $wildCardString
          }

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

查询的代码如下所示:

代码语言:javascript
复制
$query=array(
  'filtered'=>array(
      'query' => array(
            'query_string' => [
                'query' => $wildCardString,
                'fields' => ['description'],
                ]
       ),
       'filter'=>$filter_date  
  )
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47516604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档