我要求我需要处理父文件和子文档,因此我已经阅读了SolrJ API和一些博客,并且我编写了以下代码。
根据我的程序,我有一份父文件(即doc)和一份子文件(即doc2)。它的索引和工作正常。
但是在下一步中,我试图用一些与父文档匹配的查询字符串(即p_5803)进行查询。现在它已经返回了子文档和父文档。直到现在还可以。但是为什么document.hasChildDocuments()
即使对于父文档也会返回“false”?
因为它有一个子文档,它应该返回“true”。我可以知道我的程序有什么问题。请检查程序和输出并帮助我。
注意:我使用的是solr-solrj-4.10.3-cdh5.8.0.jar
import java.io.IOException;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
public class SolrCloudDemo {
public static void main(String[] args) throws SolrServerException,
IOException {
HttpSolrServer solr = new HttpSolrServer(
"http://localhost:8983/solr/collection1");
System.out.println(solr.ping());
SolrInputDocument doc = new SolrInputDocument(); // main doc
SolrInputDocument doc2 = new SolrInputDocument(); // child doc
doc.addField("id", "p_5804");
doc.addField("name", "Prasad chowdary");
doc2.addField("id", "c_5804");
doc2.addField("name", "Prasad chowdary");
// adding a child document
doc.addChildDocument(doc2);
solr.add(doc);
solr.commit();
SolrQuery query = new SolrQuery();
query.setQuery("p_5803");
QueryResponse resp = solr.query(query);
SolrDocumentList docList = resp.getResults();
System.out.println("docList ==> "+docList);
for (SolrDocument document : docList) {
System.out.println("doc ==> " + document);
System.out.println("has child ==> " + document.hasChildDocuments());
}
}
}
docList ==> {numFound=2,start=0,docs=[SolrDocument{id=p_5803, name=Prasad chowdary, _version_=1568168978219532288}, SolrDocument{id=c_5803, name=Prasad chowdary}]}
doc ==> SolrDocument{id=p_5803, name=Prasad chowdary, _version_=1568168978219532288}
has child ==> false
doc ==> SolrDocument{id=c_5803, name=Prasad chowdary}
has child ==> false
答案 0 :(得分:0)
您希望仅返回父文档,为此您通常会添加一个fq,其中包含用于区分父/子doc的字段:
$('.view_it').on('click', function(e){
e.preventDefault();
var f = this.parentNode;
f.submit();
});
如果要将子项检索为父文档的一部分,请使用 ChildDocTransformerFactory喜欢这样:
&fq=isparent:true