簡體   English   中英

搜索Solr / SolrJ中的所有字段

[英]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 );

如果使用的是Solr 3.6,則可以使用“用戶字段”。 有關詳細信息,請參閱 JIRA問題, 這個 Wiki頁面。

您需要將以下內容添加到查詢或solrconfig.xml

uf =“ * allFields”

f.allFields.qf =“ customerName customerAddress customerNotes”

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM