Как использовать диапазон цен с вложенным запросом в ElasticSearch? - PullRequest
0 голосов
/ 25 октября 2018

Как использовать диапазон цен в эластичном поисковом запросе

Вот мой запрос:

{
  "query": {
    "nested": {
      "path": "prices",
      "query": {
        "bool": {
          "must": {
            "range": {
              "prices.price": {
                "gte": 1000,
                "lte": 4000
              }
            }
          }
        }
      }
    }
  }
}

Вот индексы

{
  "took": 8,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 4,
    "max_score": 1,
    "hits": [
      {
        "_index": "courses",
        "_type": "doc",
        "_id": "5",
        "_score": 1,
        "_source": {
          "grade": {
            "pk": 2,
            "grade_name": "Grade 2"
          },
          "prices": [
            {
              "price_type": {
                "pk": 1,
                "is_online": true,
                "buy_type": "Online"
              },
              "pk": 5,
              "price": 150
            }
          ],
          "course_name": "English",
          "course_config": {
            "pk": 2,
            "large_image": "/media/course_image/filer-6_CNewNel.png"
          },
          "id": 5
        }
      },
      {
        "_index": "courses",
        "_type": "doc",
        "_id": "4",
        "_score": 1,
        "_source": {
          "grade": {
            "pk": 1,
            "grade_name": "Grade 1"
          },
          "prices": [
            {
              "price_type": {
                "pk": 1,
                "is_online": true,
                "buy_type": "Online"
              },
              "pk": 4,
              "price": 250
            }
          ],
          "course_name": "Geography",
          "course_config": {
            "pk": 4,
            "large_image": "/media/course_image/filer-5.png"
          },
          "id": 4
        }
      },
      {
        "_index": "courses",
        "_type": "doc",
        "_id": "2",
        "_score": 1,
        "_source": {
          "grade": {
            "pk": 1,
            "grade_name": "Grade 1"
          },
          "prices": [
            {
              "price_type": {
                "pk": 1,
                "is_online": true,
                "buy_type": "Online"
              },
              "pk": 3,
              "price": 125
            }
          ],
          "course_name": "Mathematics",
          "course_config": {
            "pk": 3,
            "large_image": "/media/course_image/filer-3_rEN0JZb.png"
          },
          "id": 2
        }
      },
      {
        "_index": "courses",
        "_type": "doc",
        "_id": "1",
        "_score": 1,
        "_source": {
          "grade": {
            "pk": 1,
            "grade_name": "Grade 1"
          },
          "prices": [
            {
              "price_type": {
                "pk": 1,
                "is_online": true,
                "buy_type": "Online"
              },
              "pk": 1,
              "price": 100
            }
          ],
          "course_name": "English",
          "course_config": {
            "pk": 2,
            "large_image": "/media/course_image/filer-6_CNewNel.png"
          },
          "id": 1
        }
      }
    ]
  }
}

Результирующие данные не рассчитываются на основе диапазона. Если I {'gte': 0, 'lte': 4000}, то он работает нормально. Если я использую{'gte': 1000, 'lte': 4000}, затем также возвращаются данные. Некоторые веб-сайты просят использовать 'to' и 'from', но получают тот же результат при использовании того же самого.

...