2017-03-16 69 views
1

我想在Spring Data Solr生成的Solr查詢中添加下面的參數(qf,bq)。Apache Solr擴展DisMax參數的彈簧數據

Solr的參數是:

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

我能在下面找到

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

我看到了一個開放的問題QF https://jira.spring.io/browse/DATASOLR-153

方法如何添加的QF和BQ PARAMS到使用Spring Data Solr構建的Solr查詢。

感謝

回答

1

您可以使用SolrCallback模板級別訪問SolrClient並從那裏執行查詢,或註冊您自己QueryParser的自定義查詢類型。

也許是這樣的:

@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

我得到這個錯誤:'org.springframework.data .solr.core.QueryParserBase $ NamedObjectsQuery不能轉換爲EdismaxQuery' – kk17

0

爲了避免:

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

EdisMaxQueryParser應該是這樣的:

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