2009-08-27 14 views
29

Chcę przeprowadzić wyszukiwanie w polu tekstowym w Solr. Chcę przywrócić wszystkie mecze w zakresie lub w których nie ma żadnej wartości. Dwa wyszukiwane słowa niezależnie:Wyszukiwanie zakresu dat lub pola zerowego/brak w Solr

myfield:[start TO finish] 
-myfield:[* TO *] 

Pierwsza zwraca wszystkie dopasowania w zakresie. Drugi zwraca wszystkie dopasowania, które nie mają wartości pola "myfield". Problem polega na połączeniu tych dwóch elementów.

ta zwraca żadnych meczy:

myfield:[start TO finish] OR -myfield:[* TO *] 

ta zwraca mecze pomiędzy początkiem i końcem, ale nie jest pusta pozycji:

myfield:[start TO finish] OR (-myfield:[* TO *]) 
+0

Wypróbuj [this] (http://stackoverflow.com/questions/634765/using-or-and-not-in-solr-query/). –

+0

@samkass: uzgodniony, Solr powinien to wykryć i wewnętrznie przepisać wyrażenie na coś, co może obsłużyć. –

+0

Czy ktoś zgłosił to jako błąd w Solr JIRA? Nie widzę żadnego powodu, dla którego wersja z pozytywną logiką nie powinien działać. – samkass

Odpowiedz

2

zgadzam się z roztworu Mauricio Scheffer.

Jeśli to może pomóc, przekształcił moje pierwsze zapytanie:

DocSource:"P" OR (DocSource:"E" AND (MyDate:[NOW TO *] OR -MyDate:[* TO *])) 

Do

DocSource:"P" OR (DocSource:"E" AND -(-MyDate:[* TO NOW] AND MyDate:[* TO *])) 

pierwsze zapytanie nie działały zgodnie z oczekiwaniami w Solr 4.1.

4

Rozwiązanie od Mauricio Scheffera było dla mnie przydatne, dopóki nie zamieściłem go w pełnym zapytaniu. Samo zapytanie może zawierać do trzech pól z zakresami i gdzieś w środku Solr nie udało się go przetworzyć. udało mi się go rozwiązać z kolejnym zapytaniu:

(myfield:[start TO finish] OR (*:* NOT myfield:[* TO *])) 

To woked nawet w moim złożonego zapytania, więc może to pomoże ktoś inny.