2013-04-19 16 views
8

Mam zapytanie SOLR, które powinno pobrać wszystkie pola, które przechowuję, z wyjątkiem jednego pola.
Say mam pola, muszę ciężko kodem na pola Chcę sprowadzić w
&fl=[f],[f],[f],....[f]'
Lub czy istnieje sposób, aby zrobić coś podobnego do
&fl=*,![f]'Jak wykluczać pola w zapytaniu SOLR

[f] oznacza nazwę pola.

Odpowiedz

12

Niestety, możliwość usunięcia nazwy pola za pomocą ciągu zapytania jest wciąż wyjątkową prośbą o poprawę. Więcej informacji można znaleźć na stronie SOLR-3191.

Do czasu wprowadzenia ulepszeń konieczne będzie określenie wszystkich 19 pól w parametrze fl. Można jednak zaktualizować domyślny /select requestHandler, aby zdefiniować 19 pól, które mają zostać zwrócone, jako ustawienia domyślne, które zostaną zastosowane do wszystkich zapytań, chyba że zostaną nadpisane w ciągu zapytania.

Tutaj jest zmodyfikowaną wersją domyślną /select requestHandler z przykładu solrconfig.xml:

<requestHandler name="/select" class="solr.SearchHandler"> 
    <!-- default values for query parameters can be specified, these 
    will be overridden by parameters in the request 
    --> 
    <lst name="defaults"> 
     <str name="echoParams">explicit</str> 
     <int name="rows">10</int> 
     <str name="df">text</str> 
     <!-- Only showing 3 fields for this example --> 
     <str name="fl">field1,field2,field3</str> 
    </lst> 
    </requestHandler> 

Aby uzyskać więcej informacji na temat tych ustawień domyślnych i konfiguracji requestHandler, proszę odnieść się do RequestHandlers and SearchComponents in SolrConfig.

+3

Pragnę posiadające tej funkcji. – skynss

6

Inną opcją może być: pola, które chcesz uwzględnić, powinny mieć wspólny prefiks; na dodatek możesz używać globów w swoim fl. Tak na przykład, przy założeniu, że prefiks jest tobeincluded_ można mieć wartość fl jak

tobeincluded_ *

0

Jest jeszcze inna prostsza łata dostępne, które rozwiązuje prosty przypadek tutaj: https://issues.apache.org/jira/browse/SOLR-9467 po zaakceptowaniu będzie działać tak:

&fl=*,[fl.rm v="title"] 

Aby usunąć pole tytułu.

+0

Nota prawna: Prawdopodobnie powinienem wspomnieć, że napisałem tę poprawkę. – Gus

+0

daj nam znać, kiedy/jeśli zostaniesz przyjęty. Nie znam architektury Lucen/SOLR, ale czy nie możesz opublikować tego jako samodzielnej wtyczki, która może zostać wstawiona? –

+1

Myślę, że może być możliwe spakowanie głównej klasy i użycie jej w konfiguracji obsługi żądań, ale żeby ją pokazać do użycia w '& fl', musiałem dodać nazwę do klasy w Solr. Jednak łata odnosi się czysto do gałęzi 6.2 już wczoraj, więc jeśli sprawdzisz to z apache git zastosuj i skompiluj z 'ant create-package' w katalogu solr, który powinien stworzyć w zasadzie to samo archiwum, co 6.2 RC1 z tym dodanym. – Gus

0

Inną opcją byłoby użycie Document transformer ValueAugmenterFactory, aby zastąpić rzeczywistą wartość zwróconą przez pole pustym ciągiem.

Powinno to zadziałać, jeśli Twoim wymaganiem jest uniknięcie zwrócenia zawartości tego pola.

Poniżej znajduje się przykład zastąpienie zawartości pola tytuł:

&fl=*,title:[value v=""]