[英]Searching all fields in Solr / SolrJ
有沒有一種簡單的方法來構建查詢,從而使用一次對Solr的調用來搜索Solr索引中的所有字段?
我可以通過分別定義每個字段來在所有字段中搜索一些文本:
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服務器的調用中完成此操作嗎? 怎么樣?
這最好在模式本身中完成。 定義一個fullSearch
字段(具有適當的fieldType),然后使用copyField指令將要搜索的所有字段復制到該新字段中。 (重建索引)。 然后,在查詢中,您僅在此字段中搜索。
我可以看到您已經在使用Extended DisMax Query Parser ,它是為此目的而設計的。 您應該閱讀有關Dismax Query Parser的文檔,它是eDismax的基礎。 eDismax共享dismax查詢解析器提供的大多數功能。
您可以在solrconfig.xml中為requesthandler配置默認值。
<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 );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.