2016-04-04 10 views
0

Hallo Ich habe die folgende Abfrage, aber Frühjahr Daten Solr setzt Param 1 Wert anstelle von Param 10 Wert für den letzten Parameter: "UND Tage_ss :(? 10)". ? .. ich denke, es sieht 1 und nicht mehr als 10Spring Data Solr - @Query Parameter "? 10"

ohnehin um dieses, habe ich versucht, mit: Tage wie man mit JPA tun können, aber dies stört lucene Syntax

@Highlight(prefix = "<b>", postfix = "</b>") 
    @Query("""text:(?0) AND moduleLevel_s:(?1) AND programOfStudy_s:\"?2\" AND yearOfEntry_i:?3 AND yearOfStudy_i:?4 AND unitValue_d:?5 AND 
department_s:(?6) AND teachers_ss:(?7) AND cappedAccess_b:?8 AND terms_ss:(?9) AND days_ss:(?10)""") 
    HighlightPage<CourseGuide> advancedSearch(@Param(value = "query") List<String> query, 
            @Param(value = "moduleLevel") List<ModuleLevel> moduleLevel, 
            @Param(value = "programOfStudy") String programOfStudy, 
            @Param(value = "yearOfEntry") def yearOfEntry, 
            @Param(value = "yearOfStudy") def yearOfStudy, 
            @Param(value = "unitValue") def unitValue, 
            @Param(value = "department") List<String> department, 
            @Param(value = "teachers") List<String> teachers, 
            @Param(value = "cappedAccess") def cappedAccess, 
            @Param(value = "terms") List<String> terms, 
            @Param(value = "days") List<String> days,Pageable pageable) 

tatsächlich was passiert ist, dass während seines param Ersetzungsprozesses sucht er nach allen Vorkommen von "1" in der Zeichenkette und irrt irrtümlich mit meinem? 10 Platzhalter. Wenn es in die andere Richtung funktionierte, wären die Dinge wahrscheinlich in Ordnung, dh der Prozess? 10 zuerst dann? 9, dann? 8 usw.

Antwort

1

Ich habe das gleiche Problem. Ich erstelle ein Jira auf Spring-Daten-Solr für dieses Problem, https://jira.spring.io/browse/DATASOLR-296?jql=text%20~%20%22%40Query%22%20ORDER%20BY%20created%20DESC

Aber ich finde eine Lösung.

Sie müssen solrTemplate verwenden.

Exemple:

In Ihrem solrConfiguration.java

@Configuration 
@EnableSolrRepositories(value = "com.project.repository.solr",  multicoreSupport = true) 
public class SolrConfiguration implements EnvironmentAware{ 

    private RelaxedPropertyResolver propertyResolver; 
    private Environment    environment; 

    @Override 
    public void setEnvironment(Environment environment) { 
     this.environment = environment; 
     this.propertyResolver = new RelaxedPropertyResolver(environment, "spring.data.solr."); 
    } 

    @Bean 
    public SolrServer solrServer() { 
     String solrHost = propertyResolver.getProperty("host"); 
     return new HttpSolrServer(solrHost); 
    } 

    @Bean(name = "testSolrTemplate") 
    public SolrOperations testSolrTemplate() { 
     HttpSolrServer httpSolrServer = new HttpSolrServer(propertyResolver.getProperty("host")); 
     return new SolrTemplate(httpSolrServer, "TestCore"); 
    } 
} 

Dann in Ihrem TestRepository.java

public interface TestRepository extends TestRepositoryCustom, SolrRepository<Test, String>, SolrCrudRepository<Test, String> { 
} 

Dann in Ihrem TestRepositoryCustom.java

interface TestRepositoryCustom { 
    public ArrayList<Test> findTests(
     String arg1, String arg2, String arg3, String arg4, String arg5, String arg6, String arg7, String arg8, String arg9, String arg10, String arg11 
    ); 
} 

T Henne in Ihrem TestRepositoryImpl.java

public class TestRepositoryImpl implements TestRepositoryCustom { 
    @Resource 
    private SolrTemplate testSolrTemplate; 

    @Override 
    public ArrayList<Test> findTests(
     String arg1, String arg2, String arg3, String arg4, String arg5, String arg6, String arg7, String arg8, String arg9, String arg10, String arg11 
    ) { 
     Criteria criteria = new Criteria(Criteria.WILDCARD).expression(Criteria.WILDCARD) 
       .and(new Criteria("arg1").expression(arg1)) 
       .and(new Criteria("arg2").expression(arg2)) 
       .and(new Criteria("arg3").expression(arg3)) 
       .and(new Criteria("arg4").expression(arg4)) 
       .and(new Criteria("arg5").expression(arg5)) 
       .and(new Criteria("arg6").expression(arg6)) 
       .and(new Criteria("arg7").expression(arg7)) 
       .and(new Criteria("arg8").expression(arg8)) 
       .and(new Criteria("arg9").expression(arg9)) 
       .and(new Criteria("arg10").expression(arg10)) 
       .and(new Criteria("arg11").expression(arg11)) 
     ; 

     return new ArrayList<>(testSolrTemplate.queryForPage(new SimpleQuery(criteria).setRows(2147483647), Test.class).getContent()); 
    } 

} 

Best, Thomas