2012-08-26 98 views
0

是否有一種簡單的方法來構建一個查詢,該查詢使用一次調用Solr來搜索Solr索引中的所有字段?搜索Solr/SolrJ中的所有字段

我可以單獨定義每個字段搜索在所有領域的一些文字:

String textToSearchFor = "someText"; 
HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr"); 

SolrQuery query = new SolrQuery(); 
query.setQuery("customerName:" + textToSearchFor 
       + " OR customerAddress:" + textToSearchFor 
       + " OR customerNotes:" + textToSearchFor 
       ); 
query.setQueryType("edismax"); 
QueryResponse rsp = solrServer.query(query); 

我有這種方法的問題是,如果一個字段中添加或Solr模式去掉,我有更新此代碼。我更喜歡設置我的查詢請求,以便它搜索所有可用的字段而不強制我指定每個字段名稱。

我可以在一次調用Solr服務器的情況下完成此任務嗎?怎麼樣?

回答

2

這在模式本身中是最好的。定義fullSearch字段(使用適當的fieldType),然後使用copyField指令將要搜索的所有字段複製到此新字段中。 (重建索引)。然後在您的查詢中,您只能在這一個字段中搜索。

0

如果您使用的是Solr 3.6,那麼您可以使用用戶字段。有關詳細信息,請參閱this JIRA問題和this Wiki頁面。

您需要添加下列無論是查詢或solrconfig.xml

UF = 「* allFields」

f.allFields.qf = 「客戶名稱customerAddress customerNotes」

後那麼,只需在allFields的字段中搜索,它將在3個字段customerName customerAddress customerNotes中進行搜索。您可以根據需要創建任意數量的此類用戶字段。

0

我可以看到您已經在使用擴展DisMax查詢解析器,它是專爲此目的而設計的。您應該閱讀關於Dismax Query Parser的文檔,這是eDismax的一位父親。 eDismax分享了dismax查詢解析器提供的大部分功能。

您可以在您的請求處理程序的solrconfig.xml中配置默認​​值。

<requestHandler name="standard" class="solr.StandardRequestHandler" default="true"> 
<!-- default values for query parameters --> 
    <lst name="defaults"> 
    <str name="defType">edismax</str> 
    <str name="q.alt">*:*</str> 
    <!-- define the fields to query for here --> 
    <str name="qf">customerName customerAddress customerNotes</str> 
    </lst> 
</requestHandler> 

這樣你的java代碼將會減少,因爲queryType已經被默認定義爲edismax。

String textToSearchFor = "someText"; 
HttpSolrServer solrServer = new HttpSolrServer("http://localhost:8983/solr"); 

SolrQuery query = new SolrQuery(); 
query.setQuery(textToSearchFor); 
QueryResponse rsp = solrServer.query(query);