2015-09-16 1 views
0

Я создаю следующий поиск в коде, идея состоит в том, что он фильтрует набор совпадений, затем запрашивает это, поэтому я могу добавить оценку на основе определенных полей. По какой-то причине часть фильтра работает, но все, что я поставил в запросе (т. Е. Ниже, у меня нет индекса sdfsdfsdf), он все равно возвращает все, что соответствует фильтру.Запрос на отлаженный поиск по запросу, часть запроса игнорируется?

Неправильно ли синтаксис?

{ 
     "query":{ 
      "filtered":{ 
      "query":{ 
       "bool":{ 
        "must":{ 
         "match":{ 
         "sdfsdfsdf":{ 
          "query":"4", 
          "boost":2.0 
         } 
         } 
        } 
       }, 
       "filter":{ 
        "bool":{ 
         "must":[ 
         { 
          "terms":{ 
           "_id":[ 
            "55f93ead5df34f1900abc20b", 
            "55f8ab0226ec4bb216d7c938", 
            "55dc4e949dcf833308c63d6b" 
           ] 
          } 
         }, 
         { 
          "range":{ 
           "published_date":{ 
            "lte":"now" 
           } 
          } 
         } 
         ], 
         "must_not":{ 
         "terms":{ 
          "_id":[ 
           "55f0a799acccc28204a5058c" 
          ] 
         } 
         } 
        } 
       } 
      } 
      } 
     } 
    } 
+0

Если я запускаю часть запроса на своем собственном он работает, как ожидалось – Omiron

ответ

1

Ваш filter не на правильном уровне. Это не должно быть внутри query, но на тот же уровень, как query, как это:

{ 
    "query": { 
    "filtered": { 
     "query": {   <--- query and filter at the same level 
     "bool": { 
      "must": { 
      "match": { 
       "sdfsdfsdf": { 
       "query": "4", 
       "boost": 2 
       } 
      } 
      } 
     } 
     }, 
     "filter": {   <--- query and filter at the same level 
     "bool": { 
      "must": [ 
      { 
       "terms": { 
       "_id": [ 
        "55f93ead5df34f1900abc20b", 
        "55f8ab0226ec4bb216d7c938", 
        "55dc4e949dcf833308c63d6b" 
       ] 
       } 
      }, 
      { 
       "range": { 
       "published_date": { 
        "lte": "now" 
       } 
       } 
      } 
      ], 
      "must_not": { 
      "terms": { 
       "_id": [ 
       "55f0a799acccc28204a5058c" 
       ] 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

Хорошее место, он работает как ожидалось сейчас – Omiron

0

Вы должны заменить sdfsdfsdf с существующим именем поля в вашем типе, например, title, в противном случае я думаю, что это будет возврат к запросу match_all.

"match":{ 
     "title":{ 
       "query": "some text here", 
       "boost":2.0 
     } 
} 
+0

Спасибо, но даже когда я использую имя реального поля «PRODUCT_ID» с запросом «2» он возвращает записи, у которых есть product_id, который не является 2 – Omiron