3、solr的基本操作

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、solr的基本操作_第1张图片

查看索引如下:

3、solr的基本操作_第2张图片

3、所以这里有两种做法

第一种:把title的type给改成中文搜索的type,这里是textComplex

第二种:增加一个field,比如msg_title,该field支持用中文分词的

现在用第二种方法,在schemal.xml添加如下:


在java代码中添加如下:


使用luke查看索引如下:


其实添加的话就可以把原来的id重复的给更新掉了,因为id是唯一的


4、如果我们几个字段一起搜索的话可以

3、solr的基本操作_第3张图片

但是这种比较麻烦,可以进行配置多值域:


然后把其他域的索引加入到该域中:

3、solr的基本操作_第4张图片

修改之后需要重启

 

如果你直接搜索单词的话,则默认域是如下配置:

3、solr的基本操作_第5张图片





你可能感兴趣的:(3、solr的基本操作)