You did not open source it by any chance? :-) Regards, Alex. Personal blog: http://blog.outerthoughts.com/ LinkedIn: http://www.linkedin.com/in/alexandrerafalovitch - Time is the quality of nature that keeps events from happening all at once. Lately, it doesn't seem to be working. (Anonymous - via GTD book)
On Sun, May 26, 2013 at 8:23 PM, Yury Kats <yuryk...@yahoo.com> wrote: > That's exactly what happens. Each streams goes into a separate document. > If all streams share the same unique id parameter, the last stream > will overwrite everything. > > I've asked this same question last year. Got no responses and ended up > writing my own UpdateRequestProcessor. > > See http://tinyurl.com/phhqsb4 > > On 5/26/2013 11:15 AM, Alexandre Rafalovitch wrote: >> If I understand correctly, the issue is: >> 1) The client provides multiple content stream and expects Tika to >> parse all of them and stick all the extracted content into one big >> SolrDoc >> 2) Tika (looking at load() method of: ExtractingDocumentLoader.java >> (Github link: http://bit.ly/12GsDl9 ) does not actually suspect that >> it's load method may be called multiple types and therefore happily >> submit the document at the end of that call. Probably submits a new >> document for each content source, which probably means it just >> overrides the same doc over and over again. >> >> If I am right, then we have a bug in Tika handler's expectations (of >> single load() call). The next step would be to put together a very >> simple use case and open a Jira case with it. >> >> Regards, >> Alex. >> P.s. I am not a Solr code wrangler, so this MAY be completely wrong. >> >> Personal blog: http://blog.outerthoughts.com/ >> LinkedIn: http://www.linkedin.com/in/alexandrerafalovitch >> - Time is the quality of nature that keeps events from happening all >> at once. Lately, it doesn't seem to be working. (Anonymous - via GTD >> book) >> >> >> On Sun, May 26, 2013 at 10:46 AM, Erick Erickson >> <erickerick...@gmail.com> wrote: >>> I'm still not quite getting the issue. Separate requests (i.e. any >>> addition of a SolrInputDocument) are treated as a separate document. >>> There's no notion of "append the contents of one doc to another based >>> on ID", unless you're doing atomic updates. >>> >>> And Tika takes some care to index separate files as separate documents. >>> >>> Now, if you don't need these as with the same uniqueKey, you might >>> index them as separate documents and include a field that lets you >>> associate these documents somehow (see the group/field collapsing Wiki >>> page). >>> >>> But otherwise, I think I need a higher-level view of what you're >>> trying to accomplish to make an intelligent comment. >>> >>> Best >>> Erick >>> >>> On Thu, May 23, 2013 at 9:05 AM, <mark.ka...@t-systems.com> wrote: >>>> Hello Erick, >>>> Thank you for your fast answer. >>>> >>>> Maybe I don't exclaim my question clearly. >>>> I want index many files to one index entity. I will use the same behavior >>>> as any other multivalued field which can indexed to one unique id. >>>> So I think every ContentStreamUpdateRequest represent one index entity, >>>> isn't it? And with each addContentStream I will add one File to this >>>> entity. >>>> >>>> Thank you and with best Regards >>>> Mark >>>> >>>> >>>> >>>> >>>> -----Ursprüngliche Nachricht----- >>>> Von: Erick Erickson [mailto:erickerick...@gmail.com] >>>> Gesendet: Donnerstag, 23. Mai 2013 14:11 >>>> An: solr-user@lucene.apache.org >>>> Betreff: Re: index multiple files into one index entity >>>> >>>> I just skimmed your post, but I'm responding to the last bit. >>>> >>>> If you have <uniqueKey> defined as "id" in schema.xml then no, you cannot >>>> have multiple documents with the same ID. >>>> Whenever a new doc comes in it replaces the old doc with that ID. >>>> >>>> You can remove the <uniqueKey> definition and do what you want, but there >>>> are very few Solr installations with no <uniqueKey> and it's probably a >>>> better idea to make your id's truly unique. >>>> >>>> Best >>>> Erick >>>> >>>> On Thu, May 23, 2013 at 6:14 AM, <mark.ka...@t-systems.com> wrote: >>>>> Hello solr team, >>>>> >>>>> I want to index multiple fields into one solr index entity, with the >>>>> same id. We are using solr 4.1 >>>>> >>>>> >>>>> I try it with following source fragment: >>>>> >>>>> public void addContentSet(ContentSet contentSet) throws >>>>> SearchProviderException { >>>>> >>>>> ... >>>>> >>>>> ContentStreamUpdateRequest csur = >>>>> generateCSURequest(contentSet.getIndexId(), contentSet); >>>>> String indexId = contentSet.getIndexId(); >>>>> >>>>> ConcurrentUpdateSolrServer server = >>>>> serverPool.getUpdateServer(indexId); >>>>> server.request(csur); >>>>> >>>>> ... >>>>> } >>>>> >>>>> private ContentStreamUpdateRequest generateCSURequest(String indexId, >>>>> ContentSet contentSet) >>>>> throws IOException { >>>>> ContentStreamUpdateRequest csur = new >>>>> ContentStreamUpdateRequest(confStore.getExtractUrl()); >>>>> >>>>> ModifiableSolrParams parameters = csur.getParams(); >>>>> if (parameters == null) { >>>>> parameters = new ModifiableSolrParams(); >>>>> } >>>>> >>>>> parameters.set("literalsOverride", "false"); >>>>> >>>>> // maps the tika default content attribute to the Attribute with >>>>> name 'fulltext' >>>>> parameters.set("fmap.content", >>>>> SearchSystemAttributeDef.FULLTEXT.getName()); >>>>> // create an empty content stream, this seams necessary for >>>>> ContentStreamUpdateRequest >>>>> csur.addContentStream(new ImaContentStream()); >>>>> >>>>> for (Content content : contentSet.getContentList()) { >>>>> csur.addContentStream(new ImaContentStream(content)); >>>>> // for each content stream add additional attributes >>>>> parameters.add("literal." + >>>>> SearchSystemAttributeDef.CONTENT_ID.getName(), >>>>> content.getBinaryObjectId().toString()); >>>>> parameters.add("literal." + >>>>> SearchSystemAttributeDef.CONTENT_KEY.getName(), content.getContentKey()); >>>>> parameters.add("literal." + >>>>> SearchSystemAttributeDef.FILE_NAME.getName(), content.getContentName()); >>>>> parameters.add("literal." + >>>>> SearchSystemAttributeDef.MIME_TYPE.getName(), content.getMimeType()); >>>>> } >>>>> >>>>> parameters.set("literal.id ", indexId); >>>>> >>>>> // adding some other attributes >>>>> ... >>>>> >>>>> csur.setParams(parameters); >>>>> >>>>> return csur; >>>>> } >>>>> >>>>> During debugging I can see that the method 'server.request(csur)' read >>>>> for each ImaContentStream the buffer. >>>>> When I'm looking on solr catalina log I see that the attached files reach >>>>> the solr servlet. >>>>> >>>>> INFO: Releasing directory:/data/V-4-1/master0/data/index >>>>> Apr 25, 2013 5:48:07 AM >>>>> org.apache.solr.update.processor.LogUpdateProcessor finish >>>>> INFO: [master0] webapp=/solr-4-1 path=/update/extract >>>>> params={literal.searchconnectortest15_c8150e41_cc49_4a ...... >>>>> &literal.id=26afa5dc-40ad-442a-ac79-0e7880c06aa1& ..... >>>>> {add=[26afa5dc-40ad-442a-ac79-0e7880c06aa1 (1433265910940958720), >>>>> 26afa5dc-40ad-442a-ac79-0e7880c06aa1 (1433265910971367424), >>>>> 26afa5dc-40ad-442a-ac79-0e7880c06aa1 (1433265910976610304), >>>>> 26afa5dc-40ad-442a-ac79-0e7880c06aa1 (1433265910983950336), >>>>> 26afa5dc-40ad-442a-ac79-0e7880c06aa1 (1433265910989193216), >>>>> 26afa5dc-40ad-442a-ac79-0e7880c06aa1 (1433265910995484672)]} 0 58 >>>>> >>>>> >>>>> But only the latest in the content list will be indexed. >>>>> >>>>> >>>>> My schema.xml has the following field definitions: >>>>> >>>>> <field name="id" type="string" indexed="true" stored="true" >>>>> required="true" /> >>>>> <field name="content" type="text_general" indexed="false" >>>>> stored="true" multiValued="true"/> >>>>> >>>>> <field name="contentkey" type="string" indexed="true" stored="true" >>>>> multiValued="true"/> >>>>> <field name="contentid" type="string" indexed="true" stored="true" >>>>> multiValued="true"/> >>>>> <field name="contentfilename " type="string" indexed="true" >>>>> stored="true" multiValued="true"/> >>>>> <field name="contentmimetype" type="string" indexed="true" >>>>> stored="true" multiValued="true"/> >>>>> >>>>> <field name="fulltext" type="text_general" indexed="true" >>>>> stored="true" multiValued="true"/> >>>>> >>>>> >>>>> I'm using the tika ExtractingRequestHandler which can extract binary >>>>> files. >>>>> >>>>> >>>>> >>>>> <requestHandler name="/update/extract" >>>>> startup="lazy" >>>>> class="solr.extraction.ExtractingRequestHandler" > >>>>> <lst name="defaults"> >>>>> <str name="lowernames">true</str> >>>>> <str name="uprefix">ignored_</str> >>>>> >>>>> <!-- capture link hrefs but ignore div attributes --> >>>>> <str name="captureAttr">true</str> >>>>> <str name="fmap.a">links</str> >>>>> <str name="fmap.div">ignored_</str> >>>>> >>>>> </lst> >>>>> </requestHandler> >>>>> >>>>> Is it possible to index multiple files with the same id? >>>>> It is necessary to implement my own RequestHandler? >>>>> >>>>> With best regards Mark >>>>> >>>>> >>>>> >> >