2016-11-25 2 views
0

У меня есть индекс Elasticsearch v2.4.2, я заполняю его тип .percolator кучей запросов и некоторых специальных значений. запрос-документы выглядят следующим образом:Поиск запросов в .percolator type

"query" : { 
     "query_string" : { 
     "fields" : [ "title", "meta" ], 
     "query" : "notebooks AND clamps" 
     }, 
     "key_id" : 14, 
     "owner_id" : 481, 
     "priority" : 50, 
     "special_id" : 477 
    } 

Я пытаюсь удалить некоторые из этих запросов от .percolator, особенно те, с четными значениями «KEY_ID».

Проблема в том, что я пытаюсь выполнить поиск на .percolator, но я не получаю результатов. например, я попробовал эти свертыванию вызовы:

curl 'localhost:9200/percolate_index_d/.percolator/_search?q=key_id:14&pretty' 


curl 'localhost:9200/percolate_index_d/.percolator/_search?&pretty' -d '{ query:{filtered:{filter:{term:{"key_id":"14"}}}} }' 

Но я всегда получаю это:

{ 
     "took" : 6, 
     "timed_out" : false, 
     "_shards" : { 
     "total" : 5, 
     "successful" : 5, 
     "failed" : 0 
     }, 
     "hits" : { 
     "total" : 0, 
     "max_score" : null, 
     "hits" : [ ] 
     } 
    } 

Я даже попытался использовать query.key_id, но не повезло. Не уверен, что я делаю что-то неправильно, если можно искать по типу .percolator или если есть какое-то обходное решение для этого.

ответ

1

Ваш вышеуказанный запрос неверен. Попробуйте запустить его против вашего индекса, и вы увидите, что у вас есть синтаксические ошибки.

Правильный синтаксис для вашего запроса, как это:

{ 
    "query": { 
    "bool": { 
     "must": { 
     "query_string": { 
      "fields": [ 
      "title", 
      "meta" 
      ], 
      "query": "notebooks AND clamps" 
     } 
     }, 
     "filter": [ 
     { 
      "term": { 
      "key_id": 14 
      } 
     }, 
     { 
      "term": { 
      "owner_id": 481 
      } 
     }, 
     { 
      "term": { 
      "priority": 50 
      } 
     }, 
     { 
      "term": { 
      "special_id": 477 
      } 
     } 
     ] 
    } 
    } 
} 

Тогда вы сможете найти запросы с key_id: 14, как это:

curl 'localhost:9200/percolate_index_d/.percolator/_search?q=query.bool.filter.term.key_id:14&pretty' 

UPDATE

поля метаданных key_id | owner_id | priority | special_id вашего запроса не установлены в нужном месте, вам нужно установить их за пределами из query поля, как this_

{ 
    "query" : { 
    "query_string" : { 
     "fields" : [ "title", "meta" ], 
     "query" : "notebooks AND clamps" 
    } 
    }, 
    "key_id" : 14, 
    "owner_id" : 481, 
    "priority" : 50, 
    "special_id" : 477 
} 

После этого, вы сможете получить ваши запросы с

curl 'localhost:9200/percolate_index_d/.percolator/_search?q=key_id:14&pretty' 
+0

Спасибо за ваш ответ. Проблема в том, что я не хочу фильтровать key_id | owner_id | priority | special_id. Мой запрос выше - это только запрос-документ .percolator. Я добавил значения типа «key_id», чтобы использовать их, когда я нахожу совпадение с API-интерфейсом «_percolate». Запрос работает отлично с_percolate, но мне нужно искать в типе .percolator (например) query-docs с помощью key_id <200 –

+0

Ок, извините, я неправильно понял вашу первоначальную потребность. Я думал, что key_id | owner_id | priority | special_id также должны быть фильтрами терминов вашего запроса, но вы добавляете их только как поля метаданных вашего запроса. Я обновил свой ответ соответственно. – Val

+0

Спасибо большое, он работал как ожидалось! Вы знаете, почему он не работал так, как прежде, «query.key_id = 14»? –

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