Pracowałem z ElasticSearch od kilku miesięcy, ale nadal uważam, że jest skomplikowane, gdy muszę przejść skomplikowane zapytanie.Jak korzystać z parametrów zapytania ElasticSearch (zapytanie DSL) dla wielu typów?
Chcę uruchomić kwerendę, która będzie musiała przeszukać kilka „typów”, a każdy typ ma być przeszukiwane z własnymi „Filtry”, ale trzeba się łączyć „poszukiwanej wyniki”
Na przykład:
Muszę przeszukać dokument "typu użytkownika", który jest moim znajomym i jednocześnie muszę przeszukać dokument "typu obiektu", który mi się podoba, zgodnie z podanym słowem kluczowym.
lub
Zapytanie, zarówno "I" i "NIE" punkt
Przykład zapytania:
$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,
),
),
),
),
),
),
);
jak to zapytanie ma wyszukiwania użytkownikowi access_id = 2 , ale nie może mieć identyfikatora ID 32 i wentylatora ID 36
ale to nie działa.
Edit: Zmodyfikowane zapytanie
{
"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*"
}
}
}
}
}
teraz po uruchomieniu tej kwerendy, otrzymuję dwa wyniki, jeden z zwolennik "34,518" & wentylatora: "510", a drugi z wentylatorem: "34", ale nie powinno to być tylko drugie w wyniku.
Jakieś pomysły?
Czy filtr "nie" zawsze znajduje się pod filtrem "i" lub właśnie w tym przypadku –
Witam @DrTech, właśnie edytowałem pytanie, proszę sprawdzić. –
Twoje edytowane pytanie wprowadza inne problemy. Sugeruję zapoznanie się z prezentacją, z którą się łączyłem - wyjaśnia różnicę między terminami i tekstem oraz rodzajami zapytań i filtrów, których należy użyć. – DrTech