2010-07-09 25 views
18

Jak mogę wykonać zapytanie do instancji solr dla wszystkich (lub prefiksowanych) nazw pól?Solr: Pobieranie nazw pól z indeksu solr?

chcę użyć pola dynamiczne jak

category_0_s 
category_1_s 
... 

ale nie wiem ile może istnieć. Dlatego chcę pobrać wszystkie pola (najlepiej z prefiksem "category_").

Jakieś pomysły? Dzięki

Odpowiedz

20

Użyj obsługi luke:

http://solr:8983/solr/admin/luke?numTerms=0 

Za pomocą XPath, aby uzyskać wszystkie pola, które ma dynamicBase tag dopasowanie definicji dynamicznych pól szukasz.

+1

TAK! to jest to! Dziękuję Ci. – floplus

+0

@Philippe To nie będzie zawierało nazw wszystkich używanych dynamicznych pól, o co poprosił oryginalny plakat. Przeczytaj uważnie to pytanie i odpowiedź. – GoalBased

+0

@GoalBased Ok, ale jeśli zamiast krytykować, że dałeś lepsze rozwiązanie, to też mogłoby pomóc. Aby zaktualizować moją "odpowiedź", poprawne wywołanie dla pól dynamicznych to http: // host: /solr/collection/schema/dynamicfields. Więcej opcji znajduje się na stronie https://cwiki.apache.org/confluence/display/solr/Schema+API – Philippe

1

Jeśli potrzebujesz tego z poziomu aplikacji Java, możesz użyć Solrj i LukeRequestRequestHandler.

Twój kod będzie wyglądać następująco.

LukeRequest lukeRequest = new LukeRequest(); 
lukeRequest.setNumTerms(0); 

LukeResponse lukeResponse = lukeRequest.process(server); 

Map<String, FieldInfo> fieldInfoMap = lukeResponse.getFieldInfo(); 

for (Entry<String, FieldInfo> entry : fieldInfoMap.entrySet()) { 

    String fieldName = entry.getKey(); 
    FieldInfo fieldInfo = entry.getValue(); 

    // process fieldInfo  
} 
+0

Skąd pochodzi "facet"? – tar

+0

Przepraszam, to był błąd. Naprawiono kod, aby efektywnie wykonywał iteracje poprzez wpisy hashmap. Mam nadzieję że to pomoże. – cjungel

25

To zapytanie zwróci listę oddzielonych przecinkami wszystkich używanych pól, w tym dynamicznych.

select?q=*:*&wt=csv&rows=0&facet 

Aby odpowiedzieć na oryginalne pytanie, to jak uzyskać listę wszystkich pól zaczynając category_

select?q=*:*&wt=csv&rows=0&facet&fl=category_* 

Obecność parametru facet jest potrzebne do tej pracy zapytań w nowszych wersjach Solr. W starszych wersjach będzie działać bez niego.

W starszych wersjach symbol wieloznaczny w parametrze fl nie będzie działać.

+2

W Solr5, w tym zarówno "facet", jak i 'facet.field', powoduje to 400 nieprawidłowych żądań, ale nadal zawiera pola. Opuszczenie 'facet.field' zwraca pola i 200 Sukcesu – Izkata

+0

@Izkata Dzięki za ulepszenie! Zaktualizowałem swoją odpowiedź. Co ciekawe, ustawienie 'facet = true' nie działa, ale' facet' bez wartości działa. – GoalBased

+0

W Solr 6.3 tylko fl = id, category ... działało bez aspektu = on. Zastanawiam się, czy nadal muszę dodać coś do schematu, aby wyświetlić dodatkowe informacje – gadelkareem