Obecnie próbuję przeprowadzić migrację aplikacji opartej na SOLR do Elasticsearch.
Mam to zapytanie lucene
((
name:(+foo +bar)
OR info:(+foo +bar)
)) AND state:(1) AND (has_image:(0) OR has_image:(1)^100)
O ile rozumiem, jest to kombinacja klauzul MUST połączonych z logiczną OR:
„Pobierz wszystkie dokumenty zawierające (foo AND bar w nazwie) OR (foo AND bar w info). Następnie filtruj wyniki według stanu warunku = 1 i popraw dokumenty, które mają obraz.”
Próbowałem użyć zapytania bool z MUST, ale nie udało mi się uzyskać logicznych klauzul OR w klauzulach must. Oto co mam:
GET /test/object/_search
{
"from": 0,
"size": 20,
"sort": {
"_score": "desc"
},
"query": {
"bool": {
"must": [
{
"match": {
"name": "foo"
}
},
{
"match": {
"name": "bar"
}
}
],
"must_not": [],
"should": [
{
"match": {
"has_image": {
"query": 1,
"boost": 100
}
}
}
]
}
}
}
Jak widać, MUSI brakować warunków dla „informacji”.
Czy ktoś ma rozwiązanie?
Dziękuję bardzo.
** AKTUALIZACJA **
Zaktualizowałem zapytanie elastyczne i pozbyłem się wyniku funkcji. Mój podstawowy problem nadal istnieje.