import java.io.IOException; import java.net.MalformedURLException; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; import org.apache.solr.common.SolrInputDocument; import org.junit.Test; /** * @date 2013年12月4日 * @author huangjie */ @SuppressWarnings("deprecation") public class SolrTest { //指定solr服务器的地址 private final static String URL = "http://localhost:8080/solr"; @Test public void test1(){ //1、创建SolrServer对象,该对象有两个可以使用,都是线程安全的 // CommonsHttpSolrServer:启动web服务器使用的,通过http请求的 // EmbeddedSolrServer:内嵌式的,导入solr的jar包就可以使用了 try { CommonsHttpSolrServer server = new CommonsHttpSolrServer(URL); //把查询出来的数据全部删除 // server.deleteByQuery("*:*"); // server.commit(); SolrInputDocument doc = new SolrInputDocument(); //id是必填的,并且是String类型的 //<field name="id" type="string" indexed="true" stored="true" required="true" /> //id是唯一的主键,当多次添加的时候,最后添加的相同id会覆盖前面的域 doc.addField("id", "1"); doc.addField("msg_title", "这是我的第一个solrj程序"); doc.addField("msg_content", "solr程序的运行"); server.add(doc); server.commit(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }1、
上述的程序会报错:
2、Schema.xml中有一大组field,所有要加到solr域里面的field都要往该配置文件里面加,而上面的content字段并没有在schema.xml里面
因为默认的title的type是text_general
<field name="title"type="text_general" indexed="true" stored="true"multiValued="true"/>
经过查看,text_general类型分词是标准分词查看索引如下:
3、所以这里有两种做法
第一种:把title的type给改成中文搜索的type,这里是textComplex
第二种:增加一个field,比如msg_title,该field支持用中文分词的
现在用第二种方法,在schemal.xml添加如下:
在java代码中添加如下:
使用luke查看索引如下:
其实添加的话就可以把原来的id重复的给更新掉了,因为id是唯一的
4、如果我们几个字段一起搜索的话可以
但是这种比较麻烦,可以进行配置多值域:
然后把其他域的索引加入到该域中:
修改之后需要重启
如果你直接搜索单词的话,则默认域是如下配置: