Сортировка по нескольким параметрам в pyes иasticsearch - PullRequest
11 голосов
/ 31 января 2012

Я могу передать одиночный параметр sort в поисковый запрос в pyes следующим образом:

s = MatchAllQuery()
conn.search(query=Search(s), indexes=["test"], sort='_score')

Но мне нужно передать дополнительный параметр для сортировки документов с одинаковым счетомПримерно так:

{
  "sort": [
    "_score",
    {
      "extra_param": {
        "order": "asc"
      }
    }
  ],
  "query": {
    "term": {
      "match_all": {}
    }
  }
}

Как мне это сделать в pyes?

Спасибо

Ответы [ 2 ]

16 голосов
/ 16 марта 2012

Если вы хотите, чтобы результаты в наборе результатов с одинаковым счетом были упорядочены по цене, добавьте цену к строке сортировки:

s = MatchAllQuery()
conn.search(query=Search(s), indexes=["test"], sort='_score,price')

По умолчанию порядок сортировки возрастает.Чтобы передать порядок сортировки, добавьте : asc или : desc к параметру сортировки

s = MatchAllQuery()
conn.search(query=Search(s), indexes=["test"], sort='_score,price:desc')
3 голосов
/ 28 сентября 2012

Если вы хотите выполнить более детальную сортировку, чем то, что доступно через ключевое слово es.search sort, вы можете просто передать запрос поиска в конструктор es.Search.

s = Search({'term': {'foo.monkey': 'george'}},
           sort=[{'_geo_distance': {'unit': 'mi',
                                    'order': 'desc',
                                    'monkey.location': '81,20'}}]) 
conn.search(s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...