Mam duży indeks SOLR i zauważyłem, że niektóre pola nie są poprawnie aktualizowane (indeks jest dynamiczny).
Spowodowało to, że niektóre pola mają puste pole „id”.
Próbowałem tych zapytań, ale nie zadziałały:
id:''
id:NULL
id:null
id:""
id:
id:['' TO *]
Czy istnieje sposób na zapytanie o puste pola?
Dzięki
?q=-id:*
dostanieszCannot parse '-q:*': '*' or '?' not allowed as first character in WildcardQuery
?q=-id:*
wydaje się, że działa zgodnie z oczekiwaniami. Może błąd parsowania jest związany z tym problemem .Lucene Specification Version: 3.2.0
której używałem. Cieszę się, że dodali składnię w Solr 4.5.1.Jedno zastrzeżenie! Jeśli chcesz napisać to przez OR lub ORAZ nie możesz tego użyć w tej formie:
ale musisz użyć
Ta forma jest doskonale komponowalna. Najwyraźniej SOLR rozszerzy pierwszą formę do drugiej, ale tylko wtedy, gdy jest to najwyższy węzeł. Mam nadzieję, że zaoszczędzi to trochę czasu!
źródło
Według SolrQuerySyntax możesz użyć
q=-id:[* TO *]
.źródło
Jeśli masz duży indeks, powinieneś użyć wartości domyślnej
a następnie zapytaj o tę wartość domyślną. Jest to znacznie wydajniejsze niż q = -id: ["" TO *]
źródło
Możesz go również używać w ten sposób.
źródło
Jeśli używasz SolrSharp, nie obsługuje on negatywnych zapytań.
Musisz zmienić QueryParameter.cs (Utwórz nowy parametr)
Natomiast w klasie QueryParameterCollection.cs przesłanie ToString () sprawdza, czy parametr Negative ma wartość true
W przypadku wywołania kreatora parametrów, jeśli jest to wartość ujemna. Prosta zmiana właściwości
źródło
możesz to zrobić za pomocą zapytania filtrującego q = *: * & fq = -id: *
źródło