2016-09-09 5 views
0

Это мой запрос к поисковому запросу, Я хочу дать условие «и» для условий. Теперь я дал сусло внутри условия фильтраElasticsearch AND condition with term query

'query' => [ 
    "filtered" => [ 
     "query" => [ 
      "match_all" => [] 
     ], 
     "filter" => [ 
      "bool" => [ 
       "must" => [ 
        "terms" => [ 
         "num" => [ 
          1,2,3 
         ] 
        ], 
        "terms" => [ 
         "sample" => [ 
          "a", "b" 
         ], 
        ] 
       ] 
      ] 
     ], 
     'query' => [ 
      'multi_match' => [ 
       'query' => "Hello", 
       'fields' => ['text'], 
       'operator' => 'and' 
      ], 
     ] 
    ] 
], 

но не работает. Любое другое решение для этого?

+0

запрос ищется? Вы можете объяснить ? – blackmamba

+0

выберите * из таблицы, где text = "% Hello%" и num in (1,2,3) и sample in ("a", "b") – Ann

ответ

0

Вы должны вложить свои terms фильтры более одного массива, в противном случае ваш bool/must становится ассоциативным массивом, и это не то, что вы хотите (т.е. один из terms фильтра получает отбрасываются).

'query' => [ 
    "filtered" => [ 
     "query" => [ 
      "match_all" => [] 
     ], 
     "filter" => [ 
      "bool" => [ 
       "must" => [ 
        [      <--- 
         "terms" => [ 
         "num" => [ 
          1,2,3 
         ] 
         ] 
        ],     <--- 
        [      <--- 
         "terms" => [ 
         "sample" => [ 
          "a", "b" 
         ], 
         ] 
        ]      <--- 
       ] 
      ] 
     ], 
     'query' => [ 
      'multi_match' => [ 
       'query' => "Hello", 
       'fields' => ['text'], 
       'operator' => 'and' 
      ], 
     ] 
    ] 
], 
+0

Спасибо .. Это работает .. !! – Ann

+0

Удивительно, что это помогло! – Val

1

попробуйте это, если вы хотите добавить 'и' condtion, просто добавьте эту часть в bool, must.

{"query":{"bool":{"must":[{"terms":{"num":[1,2,3]}},{"terms":{"sample":["a","b"]}},{"match":{"text":"hello"}}]}},"from":0,"size":10}