我正在不同机器上的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以进行分布式搜索,然后让我们知道会发生什么。