Я работал с ElasticSearch в течение последних нескольких месяцев, но все еще нахожу это сложным, когда мне нужно пройти сложный запрос.
Я хочу выполнить запрос, который должен будет искать несколько «типов», и каждый тип должен быть найден с его собственными «фильтрами», но необходимо объединить «найденные результаты»
Например:
Мне нужно найти документ «тип пользователя», который является моими друзьями, и в то же время я должен найти документ «тип объекта», который мне нравится, по предоставленному ключевому слову.
ИЛИ
Запрос, в котором есть и предложения "И", и "НЕ"
Пример запроса:
$options['query'] = array(
'query' => array(
'filtered' => array(
'query' => array(
'query_string' => array(
'default_field' => 'name',
'query' => $this->search_term . '*',
),
),
'filter' => array(
'and' => array(
array(
'term' => array(
'access_id' => 2,
),
),
),
'not' => array(
array(
'term' => array(
'follower' => 32,
),
),
array(
'term' => array(
'fan' => 36,
),
),
),
),
),
),
);
, так как этот запрос предназначен для поиска пользователя с access_id = 2, но не должен иметь последователя идентификатора 32 и поклонника идентификатора 36
но это не работает ..
Редактировать: модифицированный запрос
{
"query": {
"filtered": {
"filter": {
"and": [
{
"not": {
"filter": {
"and": [
{
"query": {
"query_string": {
"default_field": "fan",
"query": "*510*"
}
}
},
{
"query": {
"query_string": {
"default_field": "follower",
"query": "*510*"
}
}
}
]
}
}
},
{
"term": {
"access_id": 2
}
}
]
},
"query": {
"field": {
"name": "xyz*"
}
}
}
}
}
теперь после выполнения этого запроса я получаю два результата, один с подписчиком: «34,518» и вентилятором: «510», а второй с вентилятором: «34», но разве это не должно быть только второй в результате.
Есть идеи?