Używam języka Java do wysyłania zapytań do serwera SOLR w celu uzyskania wyników z identyfikatorami w zestawie znanych identyfikatorów, które mnie interesują.Czy istnieje limit rozmiaru lub terminu dla ciągu zapytania SOLR podczas korzystania z protokołu HTTP POST?
Najlepszym sposobem, w jaki mógłbym myśleć o uzyskaniu tych wyników, którymi jestem zainteresowany, był stworzyć długi ciąg kwerendy, który wygląda mniej więcej tak:
q=(item_id:XXX33-3333 OR item_id:YYY42-3445 OR item_id:JFDE-3838)
wygenerować ten ciąg, queryString
, przed podjęciem moją prośbę, a jest ich ponad 1500 takie identyfikatory zawarte we wniosku Chciałbym w końcu jak zrobić . Używam HTTP POST, aby kwerendę jako takie:
HttpPost post = new HttpPost(url);
post.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
StringEntity entity = new StringEntity(queryString, "UTF-8");
entity.setContentType("application/x-www-form-urlencoded; charset=utf-8");
post.setEntity(entity);
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(post);
Gdybym ograniczyć zapytanie do tylko pierwsze 1000 identyfikatory, uda i uzyskać wyniki z powrotem jak bym się spodziewał. Jednakże, jeśli mogę zwiększyć zapytanie do obejmują cały 1500, że jestem bardzo zainteresowany, otrzymuję HTTP 400 kod odpowiedzi z powodu następującego błędu:
HTTP/1.1 400 org.apache.lucene.queryParser.ParseException: Cannot parse '[my query here...]
Czy istnieje ograniczenie liczby identyfikatorów, że może LUB razem w zapytaniu SOLR? Czy jest inny powód, który może się nie udać, gdy przekroczę 1000? Eksperymentowałem i zakończyło się to niepowodzeniem około 1024 (moje identyfikatory są prawie tej samej długości), więc wydaje się sugerować, że istnieje limit znaków lub terminu.
Lub, jeśli ktoś ma dobrą sugestię, w jaki sposób mogę uzyskać przedmioty, których szukam w inny, mądrzejszy sposób, chciałbym to usłyszeć. Moje rozwiązanie do tworzenia kopii zapasowych jest po prostu zapytaniem o SOLR dla wszystkich pozycji, przeanalizowanie wyników i użycie tych, które należą do zestawu, który mnie interesuje. Wolałbym tego nie robić, ponieważ źródło danych mogłoby mieć dziesiątki tysięcy przedmiotów, a to byłoby nieefektywne.
Dzięki! Wygląda na to, że to prawdopodobnie powód. To miałoby idealny sens. Niestety istnieje inny zespół pracujący nad stroną SOLR i nie mam do niego dostępu, więc nie mogę go od razu przetestować. Będę musiał sprawdzić, czy mogę kogoś zmienić. Zamierzam iść dalej i zaakceptować twoją odpowiedź, ponieważ myślę, że to brzmi dobrze. Przekażę raport, czy to działa dla mnie, czy nie. – mattgmg1990
@ nikhil500 Zastanawiam się, jak wykonać żądanie w domenie krzyżowej w SOLR z ciągłym ciągiem zapytania? Próbowałem przesłać żądanie z JSONP, ale powiedziano, że JSONP opiera się również na GET, co ogranicza długość zapytania, czy możesz w tym pomóc? – Kuan