2015-06-25 3 views
0

У меня есть сложный случай, который я не знаю, как решить.Упругий поиск: Объединение нескольких результатов поиска

У меня есть 2 запросы: Q1 и Q2 В 2 запросов приводит к r1 и r2

каждый из результатов сортируется в особом порядке.

В качестве общего результата поиска я хочу вернуть конкатенацию r1 + r2 до, возвращая ее в приложение.

Причина в том, что я сломаю разбивку на страницы, если я сделаю это позже.

Любая идея? Его probalby простой вопрос, но я застрял на этом ...

PS:

мы также экспериментировали с сортировкой сначала через priary критериев сортировки, а затем со счетом .. но оценка всегда ломает первый сорт критерии как-то мы не можем получить оценку, работающую только внутри своего ведра.

+0

plz добавить эту информацию на ваш вопрос - не как комментарий. – Alexander

ответ

0

Предлагается использовать Combining query feature из Elastic search;

+0

Благодарю вас за ответ. Мы пробовали, но это не делает то, к чему мы стремимся. Я даю вам конкретный пример. у вас есть таблица базы данных, полная фруктов, и таблица базы данных, полная vegtable. Я хочу сначала получить все фрукты и заказать их с помощью определенной оценки, которая учитывает цвет и вес. Я хочу сделать то же самое с vegtables, но мне нужно убедиться, что все фрукты придут на первый заказ по партитуре, а затем все vegtables придут по заказу. Поэтому общий результат не упорядочен по результату (оценка балла меньше, чем самая высокая оценка vegtable), но 2 ведра –

1

Вы можете увеличить свои плоды с коэффициентом, чтобы их счет всегда был выше, чем растительный балл, но сохраняя заказ. Вы можете сделать это с простой weightfunction score query

PUT /test 

POST /test/fruits/1 
{ 
    "field": "hello world" 
} 

POST /test/fruits/2 
{ 
    "field":"hello" 
} 

POST /test/veges/1 
{ 
    "field": "hello world" 
} 

POST /test/veges/2 
{ 
    "field":"hello" 
} 

POST /test/_search 
{ 

    "query": { 

     "function_score": { 
      "query": { 
       "match": { 
        "field": "hello" 
       } 
      }, 
      "functions": [ 
       { 
        "filter": { 
         "type": { 
          "value": "fruits" 
         } 
        }, 
        "weight": 2 
       } 
      ] 
     } 
    } 
} 

Однако обратите внимание, что если вы сделаете это на большой базе данных, то это будет очень ресурсоемкой страницу вниз до первого овоща. Я бы подумал о восстановлении вашего UX, чтобы фрукты и овощи были фактически отдельными запросами. Вы можете сделать это с конечной точкой _bulk и отправить два отдельных запроса на каждый тип документа в одном вызове API сервера и вернуть оба результата обратно.

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