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;
} @Override
public 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; @Before
public void init(){
String solrURL = "http://localhost:8888/solr";
server = SolrClient.getHttpSolrServer(solrURL);
} @Test
public 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]

初识SolrJ开发, schema.xml的配置与服务初始化.的更多相关文章

  1. Mycat配置文件schema.xml参数配置

    Mycat原理: Mycat的原理中最重要的一个动词是"拦截",它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析.路由分析.读写分离分析.缓存分析等 ...

  2. 分布式项目开发-spring-dao.xml基础配置

    基础步骤: 1 数据源 2 sqlSessionFactory 3 MapperScan 打包. db.properties文件 db.username=root db.password=123456 ...

  3. solr5.5教程-schema.xml部分配置

    本文章全部内容均翻译自solr自带的配置文件. 1.Field结点说明 name: 必须的,field的名字 type:        必须的,fieldType部分所定义的type的名字 index ...

  4. 分布式项目开发-web.xml基础配置

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...

  5. 根据mysql数据库 定义solr Schema.xml中配置业务域

    <!--product--> <field name="product_name" type="text_ik" indexed=" ...

  6. solr schema.xml文档节点配置

    首先,讲解一下/usr/local/solr/collection1/conf/schema.xml的配置,此文档功能类似于配置索引数据库. Field:类似于数据库字段的属性(此文统一使用用“字段” ...

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

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

  8. 数据库中间件DBLE学习(二) 学习配置schema.xml

    前言 一边有一个经常引诱我让我"娱乐至死"的视频,还有一个不停"鞭策"我让我快点学习的大BOSS.正是有这两种极端的爱才让我常常在自信中明白自己努力的方向.嗯, ...

  9. Solr的学习使用之(二)schema.xml等配置文件的解析

    上一篇文章已经讲解了如何部署Solr,部署是部署完了,可是总觉得心里空空的,没底,里面有N多配置文件,比如schema.xml.solrConfig.xml.solr.xml and so on……都 ...

随机推荐

  1. php学习笔记之动态生成一组单选button

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 【指导】SonarQube 部署说明

    转载:https://blog.csdn.net/cuiaamay/article/details/52057091 1,安装 1.1 安装依赖 需要保证Oracle JRE 8 及以上,或者 Ope ...

  3. Redis 实现队列http://igeekbar.com/igeekbar/post/436.htm

    场景说明: ·用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时 ·高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后台在去处理这些请求 ·抢购场景,先入 ...

  4. HTML页面跳转的5种方式

    下面列了五个例子来详细说明,这几个例子的主要功能是:在5秒后,自动跳转到同目录下的hello.html(根据自己需要自行修改)文件. 1) html的实现 <head> <!-- 以 ...

  5. 016-Go Iris Restful测试

    1:data/data.go package data import( "fmt" "database/sql" _"github.com/lib/p ...

  6. TQ2440与西门子S7-200 PLC自由口通信实现过程中问题总结

    1.在win7上安装好PLC编程软件 STEP 7 MicroWIN 之后,无法实现编程软件与PLC的通信连接? 原因:STEP 7 MicroWIN 对win7支持不是很好 解决办法:在win7中安 ...

  7. SQL与SQL Server

    SQL--关系数据库的国际标准语言. SQL Server--著名的数据库管理系统.其他著名的数据库管理系统还有Oracle.Sybase等,它们都实现了SQL语言.   在SQL中,完成所有核心功能 ...

  8. Yii2框架bootstrap样式理解

    Yii2框架默认採用了bootstrap作为CSS风格,各种视图类组件都如此.之前一直採用默认风格,并在必要的时候加入或者改动一下class来达到目的.但在改版Yii1.1的orange项目时.发现之 ...

  9. python 第三库卸载办法

    Microsoft Windows [版本 6.1.7601]版权所有 (c) 2009 Microsoft Corporation.保留所有权利. C:\Users\Administrator> ...

  10. code vs 1013 求先序排列

    2001年NOIP全国联赛普及组 题目描述 Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入描述 Input De ...