2015-03-23 2 views
3

Я просто столкнулся с функциональностью «больше похоже на это»/api. Есть ли возможность комбинировать результат с more_like_this с некоторым дополнительным ограничением поиска?elasticsearch: «Больше похоже на это» в сочетании с дополнительным ограничением

У меня есть два следующих запроса ES, который работает:

POST /h/B/_search 
{ 
    "query": { 
     "more_like_this": { 
     "fields": [ 
      "desc" 
     ], 
     "ids": [ 
      "511111260" 
     ], 
     "min_term_freq": 1, 
     "max_query_terms": 25 
     } 
    } 
} 

Который возвращает

{ 
    "took": 16, 
    "timed_out": false, 
    "_shards": { 
     "total": 3, 
     "successful": 3, 
     "failed": 0 
    }, 
    "hits": { 
     "total": 53, 
     "max_score": 3.2860293, 
     "hits": [ 
     ... 

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

POST /h/B/_search 
{ 
    "query": { 
     "bool": { 
     "must": { 
      "match": { 
       "Kind": "Pen" 
      } 
     } 
     } 
    } 
} 

Я хотел бы объединить эти два к одному, s в запросе должно быть указано: «Найти похожие элементы для элементов с меткой« Перо ». Я попытался следующие с вложенным запросом, но это дает мне спину ошибки:

POST /h/B/_search 
{ 
    "query": { 
     "more_like_this": { 
     "fields": [ 
      "desc" 
     ], 
     "ids": [ 
      "511111260" 
     ], 
     "min_term_freq": 1, 
     "max_query_terms": 25 
     }, 
     "nested": { 
     "query": { 
      "bool": { 
       "must": { 
        "match": { 
        "Kind": "Pen" 
        } 
       } 
      } 
     } 
     } 
    } 
} 

Я попробовал несколько вариант для комбинирования этих двух критериев поиска, но до сих пор не повезло. Если кто-то более опытный может дать некоторый намек, который будет действительно оценен.

Благодаря

ответ

6

bool queries используются именно для этой цели. A bool must в основном эквивалентен операции Boolean AND. Аналогичным образом вы можете использовать bool should для Boolean OR и bool must_not для Boolean NOT операций.

POST /h/B/_search 
{ 
    "query": { 
     "bool": { 
     "must": [ 
      { 
       "more_like_this": { 
        "fields": [ 
        "desc" 
        ], 
        "ids": [ 
        "511111260" 
        ], 
        "min_term_freq": 1, 
        "max_query_terms": 25 
       } 
      }, 
      { 
       "match": { 
        "Kind": "Pen" 
       } 
      } 
     ] 
     } 
    } 
} 
Смежные вопросы