2013-05-27 3 views
30

У меня есть запрос с несколькими совпадениями в ES, и вы хотите добавить фильтр.ElasticSearch, многопользовательский фильтр с фильтром?

{ 
    "multi_match" : { 
    "query" : "this is a test", 
    "fields" : [ "subject^2", "message" ] 
    } 
} 

Что такое синтаксис для добавления этого фильтра?

Я пробовал:

{ 
    "multi_match" => { 
    "query" => "list", 
    "fields" => [ "username" ] 

    }, 
"filter" => { 
     "term" => { "username" => "slimkicker"} 
    } 
} 

ответ

54

В зависимости от того, что вам нужно, вы должны поставить фильтр в правильном положении. У вас есть два варианта:

Используйте верхний уровень фильтр и применить фильтр только к результатам поиска, но не к граням

{ 
    "query" : { 
     "multi_match" { 
      "query" : "this is a test", 
      "fields" : [ "subject^2", "message" ] 
     } 
    }, 
    "filter" : { 
     "term" : {"username":"slimkicker"} 
    } 
} 

Используйте отфильтрованный запрос и применить фильтр к обеим результатам поиска и фасеты

{ 
    "query" :{ 
     "filtered" : { 
      "query" : { 
       "multi_match" : { 
        "query" : "this is a test", 
        "fields" : [ "subject^2", "message" ] 
       } 
      }, 
      "filter" : { 
       "term" : {"username":"slimkicker"} 
      } 
     } 
    } 
} 
+10

Не могли бы вы объяснить немного больше о различии между двумя вариантами? в каких случаях они должны использоваться? –

+1

- это второй вопрос о фильтрах на стороне, например amazon.com. – batmaci

35

с Elasticsearch 5, синтаксис изменился к использованию BOOL запроса, например,

{ 
    "from" : 0, 
    "size" : 10, 
    "sort" : "publishDate", 
    "query": { 
    "bool": { 
     "must" : { 
     "multi_match" : { 
      "query":  "wedding", 
      "type":  "most_fields", 
      "fields":  [ "title", "text" ] 
     } 
     }, 
     "filter": { 
     "term": { 
      "locale": "english" 
     } 
     } 
    } 
    } 
} 

Документация не найдена here.

+0

Я думаю, что это alreay после версии 2.x.x, а не только 5 – batmaci

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