2013-06-04 3 views
1

мне нужно сортировать результат в следующем порядке:ElasticSearch сортировки по вложенному значению поля

  • пользователей, что я следующий
  • пользователей, что следует мне
  • Всех остальных пользователи

I есть пользователи, которые выглядят так:

{ 
    "username": "admin" 
    "followers": [ 
     { 
      "id": 2, 
      "username": "kiehn.nicola2" 
     }, 
     { 
      "id": 3, 
      "username": "adaline253" 
     }, 
     { 
      "id": 4, 
      "username": "skuhic4" 
     } 
    ], 
    "following": [ 
     { 
      "id": 2, 
      "username": "kiehn.nicola2" 
     }, 
     { 
      "id": 3, 
      "username": "adaline253" 
     }, 
     { 
      "id": 4, 
      "username": "skuhic4" 
     }, 
     { 
      "id": 5, 
      "username": "heaney.garth5" 
     } 
    ] 
} 

Возможно ли это?

Конечно, я знаю текущий идентификатор пользователя и имя пользователя.

Я пишу этот запрос, но он не работает (например, идентификатор пользователя является 1):

{ 
    "query": { 
     "bool": { 
      "must": [ 
       { 
        "wildcard": { 
         "username": { 
          "value": "*a*", 
          "boost": 1 
         } 
        } 
       } 
      ] 
     } 
    }, 
    "sort": [ 
     { 
      "following.username": { 
       "order": "asc", 
       "nested_path": "following", 
       "nested_filter": { 
        "term": { 
         "following.id": 1 
        } 
       } 
      }, 
      "followers.username": { 
       "order": "asc", 
       "nested_path": "followers", 
       "nested_filter": { 
        "term": { 
         "followers.id": 1 
        } 
       } 
      } 
     } 
    ], 
    "size": 40 
} 

ответ

1

Я хотел бы сделать это за счет увеличения; увеличить хиты, которые имеют искатель идентификатор в своих последователях на величину, а затем увеличить более низким значением хитов, которые имеют искателю в их «следующем» поле:

ПРИМЕЧАНИЯ: идентификатор поисковика является 55 в этом примере

"query": { 
    "bool": { 
     "should": [ 
      { 
       "nested": { 
        "path": "followers", 
        "query": { 
         "term" : { "followers.id": { "value": 55, "boost": 3.0 } } 
        } 
       } 
      }, 
      { 
       "nested": { 
        "path": "following", 
        "query": { 
         "term" : { "following.id": { "value": 55, "boost": 2.0 } } 
        } 
       } 
      }, 
      { 
       "match_all": { "boost": 1.0 } 
      } 
     ]   
    } 

}

Если искатель находится в поле последователей хитом, а затем искатель следующее, что удар, и поэтому повышение является самым высоким, и т.д ...

вы сказали, что все другие пользователи, следовательно, запрос "match_all: {} на th e конец.

+0

ramseykhalaf, спасибо! Это решение проблемы. – igrybkov

Смежные вопросы