假设客户要上传一个标准的mp3,服务器要对其做以下几件事:
1) 上传到server并将相关 作者名,作品名,url 等存入数据库。
2) 建立索引,当然用solr。
这个看上去没有什么问题,但主要是,我们可能不知道mp3的作者是谁,它的作品名也与文件名不同,数量多的话不可能一个个去看,那么用solr的Extract Metadata功能就可以搞定,步骤如下。
1: 在${catalina_home}\solr_config\solr\collection1\conf\schema.xml中定义几个字段(如果存在则不用定义)。
<field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/> <field name="author" type="text_general" indexed="true" stored="true"/> <field name="url" type="text_general" indexed="true" stored="true"/> <field name="description" type="text_general" indexed="true" stored="true"/> <dynamicField name="ignored_*" type="string" multiValued="true"/>
启动程序,代码如下:
public static void indexFilesSolrCell(String fileName, String solrId) throws IOException, SolrServerException { String urlString = "http://localhost:8080/solr"; HttpSolrServer solr = new HttpSolrServer(urlString); ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract"); up.addFile(new File(fileName),"audio/mp3"); up.setParam("literal.id", solrId); up.setParam("literal.url", "http://189.256.23.10:8080/UploadServer/upload/Woman.mp3"); //up.setParam("literal.image", "http://189.256.23.10:8080/UploadServer/upload/Woman.jpg"); up.setParam("literal.description", "这是mp3的简介"); up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true); solr.request(up); QueryResponse rsp = solr.query(new SolrQuery("id:Woman.mp3")); System.out.println(rsp); }
运行结果如下:
{ responseHeader={ status=0, QTime=0, params={ q=id: Woman.mp3, wt=javabin, version=2 } }, response={ numFound=1, start=0, docs=[ SolrDocument{ ignored_meta=[ xmpDM: releaseDate, 2013-04-08, dc: creator, 张靓颖, xmpDM: album, OneWoman, Author, 张靓颖, xmpDM: artist, 张靓颖, creator, 张靓颖, xmpDM: audioCompressor, MP3, meta: author, 张靓颖, stream_content_type, audio/mp3, stream_size, null, Content-Type, audio/mpeg, dc: title, OneWoman ], url=http: //189.256.23.10: 8080/UploadServer/upload/Woman.mp3, description=这是mp3的简介, id=Woman.mp3, ignored_image=[ http: //189.256.23.10: 8080/UploadServer/upload/Woman.jpg ], ignored_xmpdm_releasedate=[ 2013-04-08 ], ignored_xmpdm_audiochanneltype=[ Stereo ], ignored_dc_creator=[ 张靓颖 ], ignored_xmpdm_album=[ OneWoman ], author=张靓颖, author_s=张靓颖, ignored_xmpdm_artist=[ 张靓颖 ], ignored_channels=[ 2 ], ignored_xmpdm_audiosamplerate=[ 44100 ], ignored_version=[ MPEG3LayerIIIVersion1 ], ignored_creator=[ 张靓颖 ], ignored_xmpdm_audiocompressor=[ MP3 ], title=[ OneWoman ], title_copy=OneWoman, ignored_samplerate=[ 44100 ], ignored_meta_author=[ 张靓颖 ], ignored_stream_content_type=[ audio/mp3 ], ignored_stream_size=[ null ], content_type=[ audio/mpeg ], ignored_dc_title=[ OneWoman ], content=[ OneWomanOneWoman张靓颖OneWoman2013-04-08 ], content_copy=OneWomanOneWoman张靓颖OneWoman2013-04-08, _version_=1431728246751232000 } ] } }
可见只用了一个mp3的文件,就可以索引很多内容,那么,再将数据存入数据库就没什么问题了。你也可以直接在页面上query中查询,结果是一样的。
注意,这里由于我们的solr的所有config文件都是从example里面copy出来的,所以有些路径要修改,我这里暂时改成了绝对路径,请查看solrConfig.xml的<lib >标签,确保路径正确。