Ошибка эластичного поиска в сложном bool-запросе - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь сделать запрос на поиск по запросу, где мне нужно найти временные рамки в таблице эластичного поиска. У меня есть записи, которые имеют время начала и окончания. И из пользовательского интерфейса я даю время начала и время окончания, то есть временные окна, по которым мне нужно искать файлы. Предполагая, что временное окно времени начала и окончания в записях меньше, чем временное окно, введенное пользователем, я создал следующий запрос:

    {
    "_source":["filename","starttime","endtime"],
    "sort":[{
        "starttime":{"order":"asc"}
    }],
    "query":{
        "bool":{
            "should":{
                "bool":{
                    "must":[
                        "range":{
                            "starttime":{
                                "lte":1489602610000
                            }
                        },
                        "range":{
                            "endtime":{
                                "gte":1489602610000,
                            }
                        }
                    ]
                }
            },
            "should":{
                "bool":{
                    "must":[
                        "range":{
                            "starttime":{
                                "gte":1489602610000
                            }
                        },
                        "range":{
                            "endtime":{
                                "lte":1489689000000
                            }
                        }
                    ]
                }
            },
            "should":{
                "bool":{
                    "must":[
                        "range":{
                            "starttime":{
                                "lte":1489689000000
                            }
                        },
                        "range":{
                            "endtime":{
                                "gte":1489689000000
                            }
                        }
                    ]
                }
            }
            }
        }
}

Я получаю ошибку

"Неожиданный символ (':' (код 58)): ожидалось разделение запятой Записи массива \ n на [Источник: org.elasticsearch.transport.netty4.ByteBufStreamInput@29263f09; линия: 11, столбец: 33] "

1 Ответ

0 голосов
/ 08 ноября 2018

Есть несколько проблем с вашим запросом:

  • одна висячая запятая
  • более одного bool/should предложений
  • range запросов, неправильно упакованных внутрифигурные скобки

Вы можете найти правильный запрос ниже:

{
  "_source": [
    "filename",
    "starttime",
    "endtime"
  ],
  "sort": [
    {
      "starttime": {
        "order": "asc"
      }
    }
  ],
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "range": {
                  "starttime": {
                    "lte": 1489602610000
                  }
                }
              },
              {
                "range": {
                  "endtime": {
                    "gte": 1489602610000
                  }
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "range": {
                  "starttime": {
                    "gte": 1489602610000
                  }
                }
              },
              {
                "range": {
                  "endtime": {
                    "lte": 1489689000000
                  }
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "range": {
                  "starttime": {
                    "lte": 1489689000000
                  }
                }
              },
              {
                "range": {
                  "endtime": {
                    "gte": 1489689000000
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}
...