2014-12-09 2 views
0

У меня возникли проблемы с копированием моего запроса на удаление MySQL в эластичном поиске, я использую эту документацию: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-delete-by-query.html с использованием оболочки PHP для Laravel.Упругий поиск deleteByQuery несколько терминов

Я пытаюсь это:

$this->es->deleteByQuery([ 
    'index' => 'users', 
    'type' => 'user', 
    'body' => [ 
     'query' => [ 
          'term' => ['field1' => $this->field1], 
          'term' => ['field2' => $this->field2], 
          'term' => ['temp' => 0] 
     ] 
    ] 
]); 

Его предполагают, чтобы быть DELETE FROM пользователей WHERE field1 = $ this-> field1 И field2 = $ this-> field2 ...

I» m, что затрудняет перевод синтаксиса WHERE AND в Elastic Search.

Любая помощь?

+0

использовать 'bool' запрос для объединения терминов. – Ashalynd

+0

Я думаю, что сейчас я зашел за борт. У меня есть body => query => filter => filter => bool => must => term, term, term. Нужен ли мне фильтр => фильтрованные массивы? – Anthony

+1

Вам не нужен фильтр. существует запрос bool без фильтра: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html – Ashalynd

ответ

0

Ваш второй комментарий был в основном правильно:

Я думаю, что я пошел за борт прямо сейчас. У меня есть body => query => filter => filter => bool => must => term, term, term. Нужен ли мне фильтр фильтров filter =>?

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

Это должно быть сделано, хотя в пункте query, однако, так как верхний уровень filter пункта используется для различных целей (фильтрация фасеты/агрегирования ... это было в самом деле, переименовано в post_filter в 1.0, чтобы показать, что оно это операция «постфильтрации»).

Ваш запрос должен выглядеть следующим образом:

$this->es->deleteByQuery([ 
    'index' => 'users', 
    'type' => 'user', 
    'body' => [ 
     'query' => [ 
      'filtered' => [ 
       'filter' => [ 
        'must' => [ 
         ['term' => ['field1' => $this->field1]], 
         ['term' => ['field2' => $this->field2]], 
         ['term' => ['temp' => 0]] 
        ] 
       ] 
      ]  
     ] 
    ] 
]); 
Смежные вопросы