2014-03-05 61 views
0

我正在Solr中對不同機器上的4個不同solr服務器執行分佈式搜索。我已經將我的課程擴展到了查詢,並且我想執行分佈式搜索。我使用solrj創建了一個solr查詢。但是,當我查詢solr有時它會給我一個正確的結果,有時不正確。只有當某些分片拋出查詢分析異常時,它纔給出錯誤的結果。所以我的問題是我可以在solr中執行分佈式搜索。我正在做分佈式搜索搜索的課程大綱如下。如何在solr中執行分佈式搜索

public class CutomClass extends Query { 
    // some other code.... 
    public Weight createWeight(IndexSearcher searcher1) throws IOException { 
     SolrQuery query = new SolrQuery(); 
     query.setQuery("*:*"); 
     query.add(ShardParams.SHARDS, getShards); 
     query.setStart(0); 
     query.setRows(0); 
     query.set("sort", "score desc");  
     query.setFacet(true); 
     query.addFacetField("CLIENT"); 
     query.setFacetMinCount(1); 
     QueryResponse queryResponse = solrServer.query(query, SolrRequest.METHOD.POST); 
    } 
    // some other code.... 
} 

有時它會在某些碎片上給出follwing解析異常,並且結果出錯。

org.apache.solr.client.solrj.impl.HttpSolrServer $ RemoteSolrException:org.apache.solr.search.SyntaxError:org.apache.lucene.queryParser.ParseException:無法解析 '':遇到「 「在第1行第0列。

+0

當你發生錯誤時,你發送了什麼查詢?如果你的查詢包含「:」它需要被轉義,因爲:是字段:文本分隔符。編輯:Nvm,我剛剛看到你的編輯。 –

回答

0

是的,您可以在Solr中執行分佈式搜索。如果您使用的是單個集合(如collection1)並使用以下Solr URL來創建solrServer對象,則默認情況下您正在執行分佈式搜索。

http://localhost:8983/solr/collection1/select? 

此網址讓你在所有的碎片在查詢collection1,無論他們是在相同或不同的機器。但是,如果您有單獨的收藏品,並且您希望在這些收藏品中進行搜索,請按照http://wiki.apache.org/solr/SolrCloud

要了解更多關於分佈式搜索,請查看https://wiki.apache.org/solr/DistributedSearch

您可以簡單地評論以下行。

query.add(ShardParams.SHARDS, getShards); 

是的,*:*是不是在你的程序有問題的部分由D. Kasipovic說。查詢可以包含:。您需要提供像field:text這樣的查詢。當文本部件具有「」時發生問題。那麼你需要通過\:轉義:

請修改URL進行分佈式搜索,然後讓我們知道發生了什麼。