如何在solr中执行分布式搜索

时间:2014-03-05 10:56:08

标签: solr lucene

我在Solr上在不同机器上的4个不同的solr服务器上进行分布式搜索。我已将我的课程扩展到Query,我想执行分布式搜索。我使用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....
}

有时它会在某些分片上提供以下解析异常,结果不正确。

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

1 个答案:

答案 0 :(得分: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之类的查询。当文本部分具有“”时会出现问题。然后,您需要通过:转义\:

请修改网址以进行分布式搜索,然后告知我们会发生什么。