Я работаю с 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», но разве он не должен быть вторым в результате.
Есть идеи?