2017-03-16 3 views
1

Ich versuche, die Parameter unten (qf, bq) in einer Solr-Abfrage, die von Spring Data Solr generiert wird, hinzuzufügen.Spring Data für Apache Solr Extended DisMax-Parameter

Solr Parameter sind:

qf => Spring Data Solr Method? 
bq => Spring Data Solr Method? 

Ich war in der Lage, die Methoden zu finden unter

fq => addFilterQuery 
fl => addProjectionOnField 
defType => setDefType 
qt => setRequestHandler 

Ich sah eine offene Frage qf https://jira.spring.io/browse/DATASOLR-153

Wie kann ich die qf und bq params hinzufügen Solr-Abfrage erstellt mit Spring Data Solr.

Dank

Antwort

1

Sie können die SolrCallback auf Vorlage Ebene verwenden, um die SolrClient den Zugriff auf und die Abfrage von dort ausführen oder eigenen QueryParser für einen benutzerdefinierten Abfragetyp registrieren.

Vielleicht so etwas wie:

@Bean 
public SolrTemplate solrTemplate(SolrClient client) { 

    SolrTemplate template = new SolrTemplate(client); 
    template.registerQueryParser(EdismaxQuery.class, new EdisMaxQueryParser()); 
    return template; 
} 

class EdismaxQuery extends SimpleQuery { 
    // ... add stuff you need. Maybe `autoRelax` 
} 

class EdisMaxQueryParser extends QueryParserBase<EdismaxQuery> { 

    DefaultQueryParser defaultQueryParser = new DefaultQueryParser(); 

    @Override 
    public SolrQuery doConstructSolrQuery(EdismaxQuery source) { 

     // just use the default parser to construct the query string in first place. 
     SolrQuery target = defaultQueryParser.constructSolrQuery(source); 

     // add missing parameters 
     target.add("defType", "edismax"); 
     target.add("qf", source....); 

     return target; 
    } 
} 
+0

ich diesen Fehler habe: 'org.springframework.data .solr.core.QueryParserBase $ NamedObjectsQuery kann nicht in EdismaxQuery' umgewandelt werden – kk17

0

Um zu vermeiden:

org.springframework.data.solr.core.QueryParserBase$NamedObjectsQuery cannot be cast to EdismaxQuery

EdisMaxQueryParser sollte wie folgt aussehen:

class EdisMaxQueryParser extends QueryParserBase { 
    @Override 
    public SolrQuery doConstructSolrQuery(SolrDataQuery source) { 
     // your stuff 
    } 
}