2014-01-29 5 views
2

Мне нужно реализовать следующее в Spring Data Solr пользовательского хранилища:Spring Data Solr Внеочередные для пользовательского хранилища

(X OR Y) И Z

Мой текущий код выглядит следующим образом:

Criteria criteria = new Criteria("x").is(X_VALUE); 
criteria = criteria.or(new Criteria("y").is(Y_VALUE); 
criteria = criteria.and(new Criteria("z").is(Z_VALUE); 

Но работает этот код, я получаю следующее старшинства

X OR (Y И Z)

Любые идеи?

ответ

5

Нынешний API не допускает эту комбинацию критериев. Там есть патч, прикрепленный к DATASOLR-105, который может помочь, хотя он не решит проблему полностью.

Использование SimpleStringCriteria может помочь. Имейте в виду, что значения должны быть преобразованы в формат чтения Solr.

new SimpleQuery(new SimpleStringCriteria("(x or y) and z")); 

Update

Версия 1.2 будет иметь этот вопрос фиксированной, так что его можно создать запрос следующим образом.

Criteria orPart = Criteria.where("x").is("foo").or("y").is("bar"); 
Criteria andPart = Criteria.where("z").is("roo"); 
Query query = new SimpleQuery(orPart.and(andPart)); 
+0

Спасибо. Я действительно закончил создание строки Query, а затем использовал SimpleStringCriteria для создания критериев из нее. Будем надеяться, что патч может решить на более позднем этапе. – checklist

+0

Но даже ваш намек на SimpleQuery приводит к: x: foo ИЛИ y: bar AND z: roo, я использую весенние данные solr v. 1.3.0.RELEASE – Cipous

+1

хм ... вы правы там все еще, кажется, вопрос. Он работает для 'andPart.and (orPart)', который создает 'z: roo AND (x: foo OR y: bar)'. Проверяют это и сообщают вам, как только это будет разрешено. –

Смежные вопросы