Pracuję nad zapytaniem solr podobnym do następującego:
((myField:superneat AND myOtherField:somethingElse) OR NOT myField:superneat)
Po uruchomieniu tego nie są zwracane żadne wyniki. Korzystanie z kryteriów po obu stronach LUB NIE zwraca wyniki, których bym się spodziewał - po prostu nie współpracują dobrze. W przypadku, myField pasuje superneat , jestem zamierza również zapewnić, że myOtherField jest ustawiony na somethingelse , ale jeśli myField nie jest superneat , umieścić go w wynikach.
Czy ktoś może wyjaśnić, dlaczego solr nie zwraca wyników dla tego rodzaju zapytania? Czy należy w jakiś sposób zrestrukturyzować zapytanie - czy może jest inny sposób wykorzystania solr do osiągnięcia pożądanego rezultatu?
-myField:superneat OR myOtherField:somethingElse
byłoby to takie samo i jest nieco prostsze.źródło
Solr obecnie sprawdza, czy nie ma zapytania „czysto negatywnego” i wstawia
*:*
(pasujące do wszystkich dokumentów), aby działało poprawnie.-foo
jest przekształcany przez solr w(*:* -foo)
Dużym zastrzeżeniem jest to, że Solr sprawdza tylko, czy zapytanie najwyższego poziomu jest czysto negatywne! Oznacza to, że zapytanie takie jak
bar OR (-foo)
nie jest zmieniane, ponieważ czyste zapytanie negatywne znajduje się w klauzuli podrzędnej zapytania najwyższego poziomu. Musisz samodzielnie przekształcić to zapytanie wbar OR (*:* -foo)
Możesz sprawdzić wyjaśnienie zapytania solr, aby zweryfikować transformację zapytania:
jest przekształcany do
źródło
Zestawiając komentarze z kilku różnych odpowiedzi tutaj, w dokumentacji Solr i na drugim pytaniu SO, stwierdziłem, że następująca składnia daje poprawny wynik dla mojego przypadku użycia
(my_field = my_value lub my_field ma wartość null):
Działa to w solr 4.1.0. Jest to nieco inne niż przypadek użycia w PO; ale myślałem, że inni uznają to za przydatne.
źródło
Śledzenie grupy solr-user można znaleźć na: lista mailling użytkowników solr
Przeważa myśl, że operator NOT może być używany tylko do usuwania wyników z zapytania - a nie tylko do wykluczania elementów z całego zbioru danych. Tak się składa, że podoba mi się składnia, którą zasugerowałeś Mausch - dzięki!
źródło
Aby dodać kolejny nieoczekiwany przypadek, oto zapytanie, które nie zwróciło oczekiwanych wyników:
field_b
w moim przypadku jest to coś, na czym wykonuję faceting, i potrzebowałem skierować zapytanie „foo” tylko na ten typ (bar)Musiałem wstawić kolejny
*:*
po warunku lub, aby to zadziałało, na przykład:edycja: to jest w solr 6.6.3
źródło
simple do id :( "12345") OR id :( "7890") .... i tak dalej
źródło