Операторы OR и AND в Elasticsearch - PullRequest
       5

Операторы OR и AND в Elasticsearch

0 голосов
/ 15 октября 2018

Имея это сопоставление:

"title": { "type": "text"},
"description": { "type": "text" },
"created_at": { "type": "date" },
"modified_at": { "type": "date" },
"funnel": {
  "type": "nested",
  "dynamic": "strict",
  "properties": {
    "id":  { "type":   "long"  },
    "stages": {
      "type": "nested",
      "dynamic": "strict",
      "properties": {
        "stage": {"type": "long"},
        "date_in": {"type": "date"},
        "date_out": {"type": "date"}
      }
    }
  }
}

Я пытался получить все документы с хотя бы одним вложенным документом в течение периода времени (с 2018-10-01 по 2018-10-05)или что они все еще находятся в одной стадии (date_out null) со следующим запросом:

"query": {
  "bool": {
    "filter": {
      "bool": {
        "must": [
          {
            "nested": {
              "query": {
                "range": {
                  "funnel.stages.date_in": {
                    "lte": "2018-10-05"
                  }
                }
              },
              "path": "funnel.stages",
              "ignore_unmapped": false,
              "score_mode": "none"
            }
          },
          {
            "bool": {
              "should": [
                {
                  "nested": {
                    "query": {
                      "range": {
                        "funnel.stages.date_out": {
                          "gte": "2018-10-01"
                        }
                      }
                    },
                    "path": "funnel.stages",
                    "ignore_unmapped": false,
                    "score_mode": "none"
                  }
                },
                {
                  "bool": {
                    "must_not": [
                      {
                        "exists": {
                          "field": "funnel.stages.date_out"
                        }
                      }
                    ],
                    "adjust_pure_negative": true
                  }
                }
              ],
              "adjust_pure_negative": true
            }
          }
        ],
        "adjust_pure_negative": true
      }
    }
  }
}

Я думал, что это был способ сделать это наasticsearch, но затем я получил этот документ как совпадение:

"_source": {
  "title": "sdfgsdfgsdf",
  "description": "",
  "created_at": "2018-07-17T13:45:39+00:00",
  "modified_at": "2018-07-25T09:58:40+00:00",
  "funnel": {
    "id": "57",
    "stages": [
      {
        "stage": "337",
        "date_in": "2018-07-17T13:45:40+00:00",
        "date_out": "2018-07-25T09:58:36+00:00"
      }
    ]
  }
}

Я не знаю, что я делаю неправильно с запросом на данный момент: p

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 15 октября 2018

Попробуйте этот запрос, он работал со мной:

  {
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "nested": {
                  "query": {
                    "range": {
                      "funnel.stages.date_in": {
                        "lte": "2018-10-05",
                        "gte": "2018-10-01"
                      }
                    }
                  },
                  "path": "funnel.stages",
                  "ignore_unmapped": false,
                  "score_mode": "none"
                }
              },
              {
                "nested": {
                  "query": {
                    "range": {
                      "funnel.stages.date_out": {
                        "lte": "2018-10-05",
                        "gte": "2018-10-01"
                      }
                    }
                  },
                  "path": "funnel.stages",
                  "ignore_unmapped": false,
                  "score_mode": "none"
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "nested": {
                  "query": {
                    "range": {
                      "funnel.stages.date_in": {
                        "lte": "2018-10-05",
                        "gte": "2018-10-01"
                      }
                    }
                  },
                  "path": "funnel.stages",
                  "ignore_unmapped": false,
                  "score_mode": "none"
                }
              },
              {
                "nested": {
                  "query": {
                    "bool": {
                      "must_not": {
                        "exists": {
                          "field": "funnel.stages.date_out"
                        }
                      }
                    }
                  },
                  "path": "funnel.stages",
                  "ignore_unmapped": false,
                  "score_mode": "none"
                }
              }
            ]
          }
        }
      ],
      "adjust_pure_negative": true
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...