标签:solrj
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://3961409.blog.51cto.com/3951409/836027

前面讲到如何搭建solr运行环境以及对中文查询语句进行分词处理,这篇文章主要讲解对schema.xml的相关配置和如何使用solrj

对于搜索程序来说,最重要的是理解他的总体架构.solr也是基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面.但是他的执行过程却无异于lucene

搜索程序的典型组件,其中阴影部分由lucene完成

我们首先来说说这个schema.xml。 
schema.xml,这个相当于数据表配置文件,它定义了加入索引的数据的数据类型。主要包括types、fields和其他的一些缺省设置。

1)首先需要在types结点内定义一个FieldType子结点,包括name,class,positionIncrementGap等等一些参数,name就是这个FieldType的名称,class指向org.apache.solr.analysis包里面对应的class名称,用来定义这个类型的行为。在FieldType定义的时候最重要的就是定义这个类型的数据在建立索引和进行查询的时候要使用的分析器analyzer,包括分词和过滤。在第二篇文章中详细讲了怎样添加中文分词器,详情请参见http://3961409.blog.51cto.com/3951409/833417

2)接下来的工作就是在fields结点内定义具体的字段(类似数据库中的字段),就是filed,filed定义包括name,type(为之前定义过的各种FieldType),indexed(是否被索引),stored(是否被储存),multiValued(是否有多个值)等等。 
例:

  1. <field name="id" type="string" indexed="true" stored="true" required="true" />
  2. <field name="ant_title" type="textComplex" indexed="true" stored="true" />
  3. <field name="ant_content" type="textComplex" indexed="true" stored="true" />
  4. <field name="all" type="textComplex" indexed="true" stored="false" multiValued="true"/> 

field的定义相当重要,有几个技巧需注意一下,对可能存在多值得字段尽量设置multiValued属性为true,避免建索引抛出错误;如果不需要存储相应字段值,尽量将stored属性设为false。

3)建议建立了一个拷贝字段,将所有的全文字段复制到一个字段中,以便进行统一的检索: (此时进行查询使用all:jason就相当于使用ant_title:jason or ant_content:jason)

  1. <field name="all" type="textComplex" indexed="true" stored="false" multiValued="true"/>

并在拷贝字段结点处完成拷贝设置:

  1. <copyField source="ant_title" dest="all"/>
  2. <copyField source="ant_content" dest="all"/>

4)除此之外,还可以定义动态字段,所谓动态字段就是不用指定具体的名称,只要定义字段名称的规则,例如定义一个dynamicField,name 为*_i,定义它的type为text,那么在使用这个字段的时候,任何以_i结尾的字段都被认为是符合这个定义的,例如:name_i,gender_i,school_i等。

schema.xml配置文件大体上就是这样,更多细节请参见solr wiki http://wiki.apache.org/solr/SchemaXml

下面将使用solrj对索引进行操作

1)新建工程,并加入以下jar包(参考http://wiki.apache.org/solr/Solrj)

From /dist:

  • apache-solr-solrj-*.jar

From /dist/solrj-lib

  • commons-codec-1.3.jar
  • commons-httpclient-3.1.jar
  • commons-io-1.4.jar
  • jcl-over-slf4j-1.5.5.jar
  • slf4j-api-1.5.5.jar

也就是solr/dist/solrj-lib/中commons-codec-x.xjar , commons-httpclient-x.x.jar , commons-io-x.x.jar , jcl-over-slf4j-x.x.jar , slf4j-api-x.x.jar还有solr/dist/中apache-solr-solrj-x.x.x.jar , apache-solr-core-x.x.x.jar

2)新建一个测试类

  1. package cn.edu.ccut.blackant;
  2. import java.io.IOException;
  3. import java.net.MalformedURLException;
  4. import org.apache.solr.client.solrj.SolrServerException;
  5. import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
  6. import org.apache.solr.common.SolrInputDocument;
  7. import org.junit.Test;
  8. public class SolrTest {
  9. @Test
  10. public void test(){
  11. final String URL="http://localhost:8080/solr";
  12. //创建solrserver对象(CommonsHttpSolrServer)
  13. try {
  14. CommonsHttpSolrServer server=new CommonsHttpSolrServer(URL);
  15. SolrInputDocument doc = new SolrInputDocument();
  16. doc.addField("id", "2");//id必须有,value的值类型要根据schema.xml中规定的id类型而定
  17. doc.addField("ant_title", "atitle");
  18. doc.addField("ant_content", "jason");
  19. server.add(doc);
  20. server.commit();
  21. } catch (MalformedURLException e) {
  22. // TODO Auto-generated catch block
  23. e.printStackTrace();
  24. } catch (SolrServerException e) {
  25. // TODO Auto-generated catch block
  26. e.printStackTrace();
  27. } catch (IOException e) {
  28. // TODO Auto-generated catch block
  29. e.printStackTrace();
  30. }
  31. }
  32. }

项目中添加junit,具体做法是右键项目-->add library-->选择junit-->junit4-->finish

3)运行测试类(运行相关信息需要查看控制台或者tomcat的日志文件)

运行结果可以使用luke来查看,使用前一定要根据solr的版本来选择luke,这里是用的是solr3.5,所以luke也要用3.5版本

下载地址http://code.google.com/p/luke/downloads/detail?name=lukeall-3.5.0.jar

使用方法:

3.1)进入文件所在路径

3.2)在命令行java -jar ./lukeall-3.5.0.jar打开软件

运行界面如图:

需要说明的是要指定solr的索引文件路径.此处为/home/jason/solr-tomcat/solr/data/index,指定好路径以后

运行成功的话将会生成新的索引,如图右下角所示.如果程序中id值不变,那么每次将会覆盖id为2的索引值,这样可以完成更新索引的操作

4)访问http://127.0.0.1:8080/solr/admin/

查询*:*(查询全部),如果结果包含程序中的信息,那么恭喜配置成功!

本文出自 “李明泽” 博客,请务必保留此出处http://3961409.blog.51cto.com/3951409/836027

SOLR企业搜索平台 三 (schema.xml配置和solrj的使用)的更多相关文章

  1. solr官方文档翻译系列之schema.xml配置介绍

    常见的元素 <field name="weight" type="float" indexed="true" stored=" ...

  2. SOLR企业搜索平台 二 (分词安装)

    标签:linux lucene 分词 solr 全文检索 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://3961409.blog ...

  3. SOLR企业搜索平台 一 (搭建SOLR)

    前提是已经安装了java的环境,环境变量的配置不做为讲解,网上也有大量资料.下面以linux为例来说明如何搭建好一个solr 1)首先下载solr,下载地址:http://mirror.bit.edu ...

  4. SOLR搭建企业搜索平台

    一. SOLR搭建企业搜索平台  运行环境:  运行容器:Tomcat6.0.20  Solr版本:apache-solr-1.4.0  分词器:mmseg4j-1.6.2  词库:sogou-dic ...

  5. 利用SOLR搭建企业搜索平台 之——MultiCore

    Solr Multicore 是 solr 1.3 的新特性.其目是一个solr实例,可以有多个搜索应用. 下面着手来将solr给出的一个example跑出来.这篇文章是基于<利用SOLR搭建企 ...

  6. 利用SOLR搭建企业搜索平台 之——配置文件

    运行solr是个很简单的事,如何让solr高效运行你的项目,这个就不容易了.要考虑的因素太多.这里很重要一个就是对solr的配置要了解.懂得配置文件每个配置项的含义,这样操作起来就会如鱼得水! 在so ...

  7. 利用SOLR搭建企业搜索平台 之——运行solr

    来源:http://blog.csdn.net/zx13525079024/article/details/24806131 本节主要介绍Solr的安装,其实Solr不需要安装.直接下载就可以了    ...

  8. 利用SOLR搭建企业搜索平台 之——模式配置Schema.xml

    来源:http://blog.csdn.net/awj3584/article/details/16963525 schema.xml这个配置文件可以在你下载solr包的安装解压目录的\solr\ex ...

  9. solr的schema.xml配置属性解释

    schema.xml做什么? SOLR加载数据,创建索引和数据时,核心数据结构的配置文件是schema.xml,该配置文件主要用于配置数据源,字段类型定义,搜索类型定义等.schema.xml的配置直 ...

随机推荐

  1. IP流量重放与pcap文件格式解析

    (作者:燕云   出处:http://www.cnblogs.com/SwordTao/ 欢迎转载,但也请保留这段声明,谢谢!)   君不见 黄河之水 天上来 奔流到海不复回   君不见 高堂明镜 悲 ...

  2. spring-boot-actuator健康监控

    #健康监控 management.security.enabled=false health.mail.enabled =false http://localhost:54001/autoconfig ...

  3. Linux运维跳槽必备的40道面试精华题

    过一次年,结婚.存款.父母养老,一系列向钱看的事都在碾压我们本来还挺简单的神经,但难过没有出路,唯有找到好的方法和事业方向,才能实现一步一个脚印的逆袭. 下面是一名资深Linux运维求职数十家公司总结 ...

  4. Go语言的基本类型转换-golang类型转换

    简单整理一下Golang的基本类型转换,作为备忘: 1.整形到字符串: var i int = 1 var s string 3.  s = strconv.Itoa(i) 或者 s = Format ...

  5. IEnumerator & IEnumerable

    [IEnumerator] 用于遍历一个对象,IEnumerator在System.Collections命名空间中. public interface IEnumerator { object Cu ...

  6. 647. Palindromic Substrings 互文的子字符串

    [抄题]: Given a string, your task is to count how many palindromic substrings in this string. The subs ...

  7. DecoratorPattern(23种设计模式之一)

    参考书籍:设计模式-可复用面向对象软件基础(黑皮书) 书中写到,装饰者模式的意图是动态的给对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活.装饰者模式的另一个别名是包 ...

  8. [Training Video - 7] [Database connection] Various databases which are supported, Drivers for database connection, SQL Groovy API

    Various databases which are supported Drivers for database connection groovy.sql.Sql package SoapUI怎 ...

  9. Spring.net方法的替换

    .为什么有时候你再执行某个方法的时候比如某个操作 a.权限验证 b.任务执行 当我执行到这个方法的时候,我可以先验证权限,如果验证不通过则替换到另一个方法去执行 public class MyValu ...

  10. Spring.net 在aps.net Web的配置复习

    1.引入程序集Spring.Core,CommonLogging,Spring.Web 2.Web.Config的配置 <?xml version="1.0" encodin ...