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、所以这里有两种做法

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

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

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


在java代码中添加如下:


使用luke查看索引如下:


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


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


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


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


修改之后需要重启

 

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






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值