schema.xml位于solr/collection1/conf/目录下,是Solr中用户定义字段类型及字段的配置文件.

Solr版本: 4.6.0

第一步: Schema.xml说明

实例schema.xml结构同solr/collection1/conf/schema.xml结构一致,具体配置通过注解已注明.

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="example" version="1.5">
<fields><!--field属性说明:filed字段用于定义数据源字段所使用的搜索类型与相关设置.name:数据源字段名,搜索使用到.type:搜索类型名例如中文ika搜索名text_ika,对应于fieldType中的name.不需要分词的字符串类型,string即可,如果需要分词,types中配置好的分词type。indexed:是否被索引,只有设置为true的字段才能进行搜索排序分片(earchable, sortable, facetable)。stored:是否存储内容,如果不需要存储字段值,尽量设置为false以提高效率。multiValued:是否为多值类型,SOLR允许配置多个数据源字段存储到一个搜索字段中。多个值必须为true,否则有可能抛出异常。--><field name="id" type="string" indexed="true" stored="true" required="true" /> <field name="name" type="text_ik" indexed="true" stored="true" multiValued="false"/> <field name="phone" type="string" indexed="false" stored="true" /> <field name="email" type="string" indexed="false" stored="true" multiValued="true" /> <field name="city_id" type="int" indexed="true" stored="true" /> <field name="address" type="text_ik" index="true" stored="true" /> <field name="all" type="string" index="true" stored="true" /><!-- 动态字段定义通过*来定义  --><dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/><dynamicField name="*_s"  type="string"  indexed="true"  stored="true"/></fields><!--uniqueKey节点设置主键,solr必须有一个主键,一般为id也可以自行定义.这个字段决定和增强文档的唯一性-->
<uniqueKey>id</uniqueKey><!--defaultSearchField节点默认搜索的字段,默认值为text, 如果我们已经将需要搜索的字段拷贝至all字段了,在这里设为all即可-->
<defaultSearchField>text</defaultSearchField> <!--solrQueryParser节点默认搜索操作符参数,及搜索短语间的逻辑,用AND增加准确率,用OR增加覆盖面,建议用AND,也可在搜索语句中定义。例如搜索"Java 多线程",使用AND默认搜索为"Java AND 多线程"-->
<solrQueryParser defaultOperator="OR"/><!--copyField节点如果我们的搜索需要搜索多个字段该怎么办呢?这时候,我们就可以使用copyField节点,我们将所有的中文分词字段全部拷贝至all中,当我们进行全文检索是,只用搜索all字段就OK了.
-->
<copyField source="name" dest="all" />
<copyField source="phone" dest="all" />
<copyField source="email" dest="all" /><types><!--定义字段处理类型  --><fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0" /> <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" positionIncrementGap="0" /> <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" positionIncrementGap="0" /> <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" /> <fieldType name="text" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.WhitespaceTokenizerFactory" /> </analyzer> </fieldType> <!-- 定义常规分词 类型--><fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"><!-- 建立索引时的分词器配置 --><analyzer type="index"><!-- 建立索引时使用标准分词器 --><tokenizer class="solr.StandardTokenizerFactory"/><!-- 停用词过滤器, 用于索引文档中的停用词去掉 --><filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /><!-- 大写转小写过滤器 --><filter class="solr.LowerCaseFilterFactory"/></analyzer><!-- 查询的时候使用的分词器   --><analyzer type="query"><!-- 查询索引时使用标准分词器 --><tokenizer class="solr.StandardTokenizerFactory"/><!-- 停用词过滤器, 用于索引文档中的停用词去掉 --><filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /><!-- 定义查询的时使用同义词过滤器   --><filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/><!-- 大写转小写过滤器 --><filter class="solr.LowerCaseFilterFactory"/></analyzer></fieldType><!--定义IK分词类型--><fieldType name="text_ik" class="solr.TextField"><!--索引时候的分词器--><analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/><!--查询时候的分词器--><analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/></fieldType></types></schema>

在默认的solr/collection1/conf/schema.xml文件中,有如下field设定,其中title配置为允许多个值,所以我们抽象类中可以用集合标示.

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="title" type="text_general" indexed="true" stored="true" multiValued="true"/>
<field name="author" type="text_general" indexed="true" stored="true"/>

第二步: 创建相应的抽象类

package com.test.model;
import java.io.Serializable;
import java.util.List;
import org.apache.commons.lang.builder.ToStringBuilder;public class Article implements Serializable{/*** */private static final long serialVersionUID = 4017316764889231758L;private String id;private List<String> title;private String author;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public List<String> getTitle() {return title;}public void setTitle(List<String> title) {this.title = title;}@Overridepublic String toString() {return ToStringBuilder.reflectionToString(this);}}

第三步: 创建solr客户端

package com.plugin.solr.client;import java.util.Collections;
import java.util.HashMap;
import java.util.Map;import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class SolrClient {private static final Logger LOG = LoggerFactory.getLogger(SolrClient.class);private static Map<String, SolrServer> solrServerMap = Collections.synchronizedMap(new HashMap<String, SolrServer>());/*** 获取HttpSolrServer* * @param SOLR_URL* * @return SolrServer*/public static SolrServer getHttpSolrServer(final String solrURL) {SolrServer solrServer = null;if (!solrServerMap.containsKey(solrURL)) {try {solrServer = new HttpSolrServer(solrURL);if (solrServer != null) {solrServerMap.put(solrURL, solrServer);LOG.info("Load " + solrURL + " finish.");}} catch (Exception e) {LOG.warn("sorlURL error ," + solrURL);e.printStackTrace();}}return solrServerMap.get(solrURL);}
}

第四步: 编写客户端连接检测方法并测试

    /*** ping检测solr是否down掉 [测试通过]* @param server* @return*/public static String ping(SolrServer server){try {return server.ping().getResponse().toString();} catch (SolrServerException e) {LOG.error("Solr system ping error " + e.getMessage(), e);} catch (IOException e) {LOG.error("Solr system ping error " + e.getMessage(), e);}return null;}

启动tomcat服务器(前提是solr与tomcat已集成),本地tomcat端口为8888,编写junit测试

package com.test.search;import java.util.ArrayList;
import java.util.List;
import java.util.UUID;import org.apache.solr.client.solrj.SolrServer;
import org.junit.Before;
import org.junit.Test;import com.plugin.page.Page;
import com.plugin.solr.client.SolrClient;
import com.plugin.solr.engine.SolrEngineHandler;
import com.test.model.Article;public class SolrTest {private SolrServer server;@Beforepublic void init(){String solrURL = "http://localhost:8888/solr"; server = SolrClient.getHttpSolrServer(solrURL);}@Testpublic void pingSolr(){System.out.println("ping solr result: " +SolrEngineHandler.ping(server));}
}

运行结果

ping solr result: {responseHeader={status=0,QTime=656,params={df=text,echoParams=all,rows=10,echoParams=all,wt=javabin,version=2,q=solrpingquery,distrib=false}},status=OK}

连接成功.

转载请注明出处:[http://www.cnblogs.com/dennisit/p/3620597.html]

转载于:https://www.cnblogs.com/dennisit/p/3620597.html

初识SolrJ开发, schema.xml的配置与服务初始化.相关推荐

  1. schema.xml文件配置

    2019独角兽企业重金招聘Python工程师标准>>> schema.xml是Solr一个配置文件,它包含了你的文档所有的字段,以及当文档被加入索引或查询字段时,这些字段是如何被处理 ...

  2. 开源分布式中间件 DBLE Schema.xml 配置解析

    文章来源:爱可生开源社区 作者:张沈波 1.DBLE项目介绍 DBLE 是企业级开源分布式中间件,江湖人送外号 "MyCat Plus":以其简单稳定,持续维护,良好的社区环境和广 ...

  3. 1、solr包结构介绍,solrCore的安装配置,solr部署到Tomcat,多solrCore配置,配置中文分词器,界面功能介绍,Schema.xml的基本使用,数据导入

    一.下载solr,下载地址是:http://archive.apache.org/dist/lucene/solr/,选择自己想要的solr的版本,本项目使用的版本是4.10.3 二.如果想下载Luc ...

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

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

  5. solr配置-Schema.xml

    可参考配置:http://wiki.apache.org/solr/SchemaXml(基本上文档上面讲的已经很详细了) 先来看一下Schema.xml都有什么配置 1,uniqueKey 2,n多n ...

  6. mycat核心配置详解(schema.xml配置)

    name:定义逻辑库名字(通过mycat访问看到的数据库名.逻辑库名和后端物理库名可能不同,也可能对应后端多个物理库.同一个实例下的物理数据库名称不能重复.同样schema的逻辑库名也不能重复) sq ...

  7. SUSE12SP3-Mycat(2)Schema.xml配置详解

    简介 Schema.xml 作为 MyCat 中重要的配置文件之一,管理着 MyCat 的逻辑库.表.分片规则.DataNode 以及 DataSource.弄懂这些配置,是正确使用 MyCat 的前 ...

  8. Spring学习(五)bean装配详解之 【XML方式配置】

    本文借鉴:Spring学习(特此感谢!) 一.配置Bean的方式及选择 配置方式 在 XML 文件中显式配置 在 Java 的接口和类中实现配置 隐式 Bean 的发现机制和自动装配原则 方式选择的原 ...

  9. Spring 4 xml 注解配置谅解 spring

    2019独角兽企业重金招聘Python工程师标准>>> Spring 4 xml 注解配置谅解 博客分类: spring <Spring in Action>4th Ed ...

最新文章

  1. RuntimeError: Integer division of tensors using div or / is no longer supported, and in a future rel
  2. htmlunit爬虫工具使用--模拟浏览器发送请求,获取JS动态生成的页面内容
  3. python中的浅拷贝和深拷贝
  4. python的scrapy框架的安装_Python爬虫基础(四)--Scrapy框架的安装及介绍
  5. input中的disabled 和 readonly的区别
  6. 在react中使用定时器
  7. apache禁止訪问某些文件或文件夹的方法
  8. Java 高级算法——数组中查询重复的数字之二
  9. 带你认识不一样的Stream,Java8就该这么玩!
  10. 文件大小图形化软件 SpaceSniffer(转载)
  11. Android 超级工具类
  12. 测试librdkafka
  13. 为知笔记-艾宾浩斯遗忘曲线复习插件
  14. 360木马云查杀结果(非常有讽刺意义)
  15. 「js基础」JavaScript入门,难不难你来说
  16. 从钉钉后台对接考勤打卡信息(仅供参考)
  17. 3D软件中怎么绘制杯子?
  18. 京东区块链之供应链应用篇:溯源应用结合区块链能碰撞出什么火花?
  19. MVC、MVP、MVI、MVVM 和 VIPER 设计模式
  20. APICloud AVM框架 开发视频会议APP

热门文章

  1. js中的Object.create(null) 和 {} 的区别
  2. React开发(124):ant design学习指南之form中的属性isFieldTouched
  3. 前端学习(3235):react生命周期2
  4. [css] 请写出font属性的快捷写法
  5. 工作204:进行输入成功后验证
  6. “约见”面试官系列之常见面试题之第七十六篇之vue-router中的路由钩子函数基本用法 (建议收藏)
  7. “约见”面试官系列之常见面试题第三十四篇之事件冒泡、事件捕获、事件代理(建议收藏)
  8. 前端学习(1838):前端面试题之执行上下文
  9. oracle之基本的过滤和排序数据之课后练习
  10. java学习(40):成员实例的定义和访问