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



我正在不同机器上的4个不同的Solr服务器上进行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.solor.search.SyntaxError:org.apache.locene.queryParser.ParseException:无法解析第1行第0列的">:":遇到"。

是的,您可以在Solr中执行分布式搜索。如果您使用单个集合(比如collection1)并使用以下Solr URL来创建solrServer对象,那么默认情况下您正在进行分布式搜索。

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

该URL允许您查询集合1中的所有碎片,无论它们是在同一台机器中还是在不同的机器中。但是,如果你有单独的收藏,并且你想在这些收藏中进行搜索,请按照http://wiki.apache.org/solr/SolrCloud.

要了解有关分布式搜索的更多信息,请查看https://wiki.apache.org/solr/DistributedSearch.

您可以简单地对以下行进行注释。

query.add(ShardParams.SHARDS, getShards);

是的,正如D.Kasipovic所说,*:*并不是你程序中有问题的部分。查询可以包含:。您需要提供类似field:text的查询。当文本部分具有">";。然后你需要用:逃离:

请修改URL以进行分布式搜索,然后让我们知道会发生什么。

最新更新