2015-09-18 3 views
0

Я использую Elasticsearch для поиска японских документов и объединения нескольких полей (Морфологический анализ + N-Грамм) для запросов.Elasticsearch: как отсортировать результат запроса строки запроса?

Запрос ниже:

{ 
    "query":{ 
    "bool":{ 
     "must":{ 
     "query_string":{ 
      "query":"QUERY_KEYWORD", 
      "fields":[ 
      "title", 
      "description", 
      "content", 
      "content.ngram^3" 
      ] 
     } 
     }, 
     "should":[ 
     [ 
      { 
      "range":{ 
       "created":{ 
       "boost":"5", 
       "gte":"now-1M" 
       } 
      } 
      } 
     ] 
     ] 
    } 
    } 
    "sort":{ 
     "view_count": {"order": "desc"} 
    } 
} 

возвращает каждый документ в индексе отсортированные по view_count (не обращая внимания на счет от query_string), который является не то, что я хочу.

Многоуровневая сортировка не работает хорошо либо:

"sort": [ 
     { "view_count": { "order": "desc" }}, 
     { "_score": { "order": "desc" }} 
] 

возвращает то же самое, что и предыдущий запрос, и

"sort": [ 
     { "_score": { "order": "desc" }}, 
     { "view_count": { "order": "desc" }} 
] 

dosen't рода вообще ничего (я подозреваю, view_count только работает в качестве браслетера для _score).

Вопрос: Как я могу получить документы, соответствующие QUERY_KEYWORD, отсортированным по view_count?

Заранее спасибо.

ответ

0

Сортировка сортировки сортировки по счету. В вашем случае я думаю, что вы должны посмотреть на запрос оценки функции. В частности, коэффициент значения поля.

https://www.elastic.co/guide/en/elasticsearch/reference/2.0/query-dsl-function-score-query.html#function-field-value-factor

При этом количество просмотров влияет на оценку на основе количества просмотров.

+0

Спасибо. Насколько я понимаю, что запросы с функциями функции работают против другого запроса? Я понял, что сам запрос 'query_string' возвращает каждый документ в индексе, поэтому получить хороший результат сортировки может быть невозможно. – osyoyu

+0

Хм, не уверен, что вы имеете в виду, если вы не предоставляете аргумент запроса запросу query_string, он равен запросу match_all. Но если вы действительно ищете слово, запрос query_string не будет возвращать все документы. –

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