Solr MultiValues

1. 什么是MultiValues,如何建立索引:
solr的schema.xml配置文件在配置Filed的时候,有个属性:
MutiValued:true if this field may containmutiple values per documents,这个说明有点模糊,下面结合实际应用,列举两个不同的例子。

例子一:一个field有多个值MultiValue,值来自同一filed, 如:

<field name=”executor” type=”int” indexed=”true” stored=”true” multiValued=”true” /
executor这个field可以多个值,任何executor:29 OR executor:40,类似查询都能查出id为3的记录。

附注:使用solrj建此索引时,定义成集合类型即可,如:
@Field
private Set<Integer> executor;
public Set<Integer> getExecutor() {
return executor;
}
public void setExecutor(Set<Integer> executor) {
this.executor = executor;
}

例子二:类似综合搜索,结合copyFiled使用,多个Filed拷贝到该Field上

如keywords,是name、introduction、industryName三个的集合,无论搜索name、introduction、industryName中任意一个,都能通过keywords搜索出来。

2. 如何进行查询

  1. SolrServer solrserver = new HttpSolrServer( SOLR_URL );   
  2. SolrQuery query = new SolrQuery();   
  3. query.setQuery(“*:*”);   
  4.   
  5. List<MovieInfo> movielist = new  ArrayList<MovieInfo>();   
  6.   
  7. try {   
  8.     QueryResponse rsp = solrserver.query(query);   
  9.     SolrDocumentList docs = rsp.getResults();   
  10.   
  11.     for (SolrDocument doc : docs)   
  12.     {   
  13.         String name = (String) doc.getFieldValue(“videoname”);   
  14.         String url = (String) doc.getFieldValue(“videourl”);   
  15.            
  16.         //capture image urls   
  17.         Collection<Object> imgurls = doc.getFieldValues(“captureurls”);   
  18.         String[] sImgurls = new String[imgurls.size()];   
  19.         int iImgurl = 0;   
  20.               for( Object imgurl : imgurls )   
  21.               {   
  22.                 sImgurls[iImgurl++] = (String)imgurl;   
  23.               }   
  24.            
  25.         MovieInfo movieinfo = new MovieInfo();   
  26.         movieinfo.setName(name);   
  27.         movieinfo.setUrl(url);   
  28.         movieinfo.setImgurl(sImgurls[0]);   
  29.         movielist.add(movieinfo);   
  30.     }   
  31. catch (SolrServerException e) {   
  32.     // TODO Auto-generated catch block   
  33.     e.printStackTrace();   
  34. }  

要用collection<Object>去接收multiValued的返回值

参考:1. solr的multivalued使用说明
2. solr multivalue的实现分析

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>