首页 > 其他 > 详细

solr安装与使用

时间:2020-08-13 16:22:50      阅读:60      评论:0      收藏:0      [点我收藏+]

solr

Solr是一个独立的企业级搜索应用服务器, 用户可以通过http请求访问这个服务器, 获取或者写入对应的内容, 其底层是Lucene.

下载和安装

下载

?途径1: 官网网址: http://lucene.apache.org/ 与Lucene的官网是同一个

?途径2: 下载历史版本的网址: http://archive.apache.org/dist/lucene/solr/

目录结构

--bin solr脚本文件

--contrib solr依赖文件

--dist solr依赖文件

--docs solr使用文档

--example solr实例

solr的启动

方式一:使用内置web服务器

  • 打开cmd窗口
  • 切换到solr的example目录下
  • 执行java -jar start.jar
  • 打开localhost:8983/solr

solr内置服务器默认端口8983

方式二:tomcat启动

  • 将tomcat放入没有中文和空格的目录下,放置后,启动tomcat,测试是否可以正常开启。
  • 拷贝solr的example\webapps\solr.war,拷贝到tomcat的webapps下。
  • 启动tomcat,solr.war会自动解压,然后关闭tomcat,将war包删除,防止之后启动tomcat再次解压。
  • 将\solr\server\lib\ext 下的所有jar包,拷到tomcat\lib 目录下
  • 将.\solr\dist\ 目录下的solr-dataimporthandler-6.3.0.jar 和solr-dataimporthandler-extras-6.3.0.jar也拷贝到tomcat的lib 路径下
  • 将server\resources目录下的日志配置文件拷贝到tomcat\webapps\solr\WEB-INF\classes
  • 将example\solr的目录建议复制到和tomcat同级的目录下改名为solrhome(方便管理)(作为solr的索引库存储位置)
  • 打开tomcat下的bin中的Catalina.bat文件,将set “JAVA_OPTS=-Dsolr.solr.home=D:\solr\solrhome(tomcat放在D:\solr中)关联solr配置
  • 启动tomcat,访问localhost:8080/solr

solr的配置和管理

访问localhost:8080/solr打开solr管理界面

技术分享图片

选择索引库,在solr管理界面的Core Selector选择索引库
技术分享图片

配置多个索引库

在solr配置中的collextion1复制一份为collection2,并删除collection2的data文件夹,修改core.properties配置文件将其中的name属性改为当前collection2。在solr管理界面上就可以选择collection2索引库。
技术分享图片

添加索引

技术分享图片

查询索引

技术分享图片

solrConfig.xml

solrconfig.xml 配置文件主要定义了 solr 的一些处理规则,包括索引数据的存放 位置,更新,删除,查询的一些规则配置。

一般此文件不需要进行修改, 采取默认即可

schema.xml

Solr中会提前对文档中的字段进行定义,并且在schema.xml中对这些字段的属性进行约束,例如:字段数据类型、字段是否索引、是否存储、是否分词等等.

第一种标签为 field标签: 主要是用来指定字段名称的, Lucene中是有用户在程序中指定, solr中需要提前在配置文件中指定.

name: 字段的名称

type: 字段的类型

indexed: 是否索引

stored: 是否保存

multiValued: 是否多值, 这个字段, 类似存储一个数组
这里有两个不允许删除的: 一个是 version_ 一个是 root_ 这两个是solr内部需要使用的字段.

有一个字段的名称必须为id,其类型都不允许进行修改.原因是id字段已经被主键使用uniqueKey.

其余的是一些初始化好的字段.

第二种标签为dynamicField, 被称为是动态字段

此种标签是为程序的扩展所使用的, 因为我们不可能把所有的字段全部定义好, 所以就需要动态域来进行动态扩展

第三种标签为 uniqueKey: 必要标签, 表名文档的唯一属性, 一般默认为id

id

第四种标签为 copyField: 被称为是复制域

????????source: 表名要复制那个字段的值
????????dest: 复制到那个字段上
此种标签主要是为了查询所使用的,
例如, 当查询Text字段的时候, 实质上相当于查询title和name两个字段

? 第五种标签: fieldType ??字段类型定义标签-->

	<fieldType name="managed_en" class="solr.TextField" positionIncrementGap="100">
		<analyzer>
			<tokenizer class="solr.StandardTokenizerFactory"/>
			<filter class="solr.ManagedStopFilterFactory" managed="english" />
			<filter class="solr.ManagedSynonymFilterFactory" managed="english" />
		</analyzer>
	</fieldType> ?
	此种标签是用来定义字段的类型的,可以指定此字段使用何种分词器进行分词.

添加ik分词器

? 第一步: 导入ik相关的依赖包

? 将jar包放置在tomcat>webapps>solr>WEB-INF>lib下

IKAnalyzer2012FF_u1.jar

? 第二步: 导入ik相关的配置文件(ik配置文件, 扩展词典和停止词典)

ext.dic拓展词典(数据自己添加,分词)

stopword.dic停止字典(常存储句末语气词,如啊,了,哦)

IKAnalyzer.cfg.xml ik配置文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

-<properties>

<comment>IK Analyzer 扩展配置</comment>

<!--用户可以在这里配置自己的扩展字典-->


<entry key="ext_dict">ext.dic;</entry>

<!--用户可以在这里配置自己的扩展停止词字典-->


<entry key="ext_stopwords">stopword.dic;</entry>

</properties>

? 将三个文件放置在tomcat>webapps>solr>WEB-INF>classes下

? 第三步, 在schema.xml配置文件中自定义一个字段类型, 引入ik分词器

 <fieldType name="text_ik" class="solr.TextField">
        <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
 </fieldType>

? 第四步: 为对应的字段设置为text_ik类型即可

<field name="content" type="text_ik" indexed="false" stored="true" multiValued="true">

solr索引操作

solrj是Apache官方提供的一套java开发的, 用于操作solr服务的API, 通过这套API可以让程序与solr服务进行交互, 让java程序可以直接操作solr服务进行增删改查

solrj的官网网址: https://wiki.apache.org/solr/Solrj

导入依赖

<dependency>
????	<groupId>org.apache.solr</groupId>
????	<artifactId>solr-solrj</artifactId>
????	<version>4.10.2</version>
????</dependency>
????<dependency>
???		<groupId>commons-logging</groupId>
????	<artifactId>commons-logging-api</artifactId>
????	<version>1.1</version>
????</dependency>

索引的添加

写入一个文档对象

//1.索引写入器对象
        SolrServer solrServer = new HttpSolrServer("http://localhost:8081/solr/collection1");
        //2.添加文档
        SolrInputDocument document = new SolrInputDocument();
        document.addField("id",10);

        document.addField("title","日期类型");
        document.addField("content","maven是一个管理项目依赖和构建的工具");
        document.addField("hiredate","2019-08-18T16:00:00Z");
        solrServer.add(document);
        //3.提交数据
        solrServer.commit();

写入多个文档对象

//1.索引写入器对象
        SolrServer solrServer = new HttpSolrServer("http://localhost:8081/solr/collection1");

        //2.添加文档

        List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();

        SolrInputDocument doc1 = new SolrInputDocument();
        doc1.addField("id","5");
        doc1.addField("title","mysql简介");
        doc1.addField("content","mysql是一个高效的关系型数据库");
        docs.add(doc1);
        SolrInputDocument doc2 = new SolrInputDocument();
        doc2.addField("id","6");
        doc2.addField("title","redis简介");
        doc2.addField("content","redis是一个内存型的非关系型数据库");
        docs.add(doc2);

        solrServer.add(docs);
        //3.提交数据
        solrServer.commit();

写入javabean对象

public class News {
    @Field
    private String id;
    @Field
    private String title;
    @Field
    private String content;
    @Field
    private String url;
    //此处省略了 get 和 set方法
 }

SolrServer solrServer = new HttpSolrServer("http://localhost:8081/solr/collection1");

News news = new News(7,"张三","mybatis简介","mybatis是是一个优秀的持久层框架","http://www.qq.com");

solrServer.addBean(news);

solrServer.commit();

? 注意事项:

– 如果使用javaBean进行数据添加时, 需要给对应要加入索引库的字段添加@Field,用来指定其实一个document字段

– javaBean中的字段必须提前在solr的schema.xml中提前定义好

索引的修改

SolrServer solrServer = new HttpSolrServer("http://localhost:8081/solr/collection1");
//索引库中存在相同id属性的对象,则为修改
News news = new News(7,"李四","mybatis简介","mybatis是是一个优秀的持久层框架","http://www.qq.com");

solrServer.addBean(news);

solrServer.commit();

索引的删除

SolrServer solrServer = new HttpSolrServer("http://localhost:8081/solr/collection1");

//删除索引
//solrServer.deleteByQuery("*:*")    //删除所有
 solrServer.deleteById("change.me1");

solrServer.commit();

索引的查询

//创建一个索引服务
        SolrServer solrServer = new HttpSolrServer("http://localhost:8081/solr/collection1");

        //创建索引查询对象
        SolrQuery query = new SolrQuery("*:*");

        //执行查询;
        QueryResponse response = solrServer.query(query);
        //文档的集合
        SolrDocumentList list = response.getResults();

        for (SolrDocument document : list) {
            String id = (String)document.get("id");
            String title = (String)document.get("title");
            String content = (String)document.get("content");

            System.out.println("id:"+id+",title:"+title+",content:"+content);
        }

在创建SolrQuery时,我们填写的Query语句,可以有以下高级写法:

查询语句中如果有特殊字符,需要转义,可以使用: ” ”

1、匹配所有文档:: (通配符?和 * :“*”表示匹配任意字符;“?”表示匹配出现的位置)

2、布尔操作:AND、OR和NOT布尔操作(推荐使用大写,区分普通字段)

3、子表达式查询(子查询):可以使用“()”构造子查询。 比如:(query1 AND query2) OR (query3 AND query4)

4、相似度查询:

(1)默认相似度查询:title:appla~,此时默认编辑距离是2

(2)指定编辑距离的相似度查询:对模糊查询可以设置编辑距离,可选02的整数:title:appla1。

5、范围查询(Range Query):Lucene支持对数字、日期甚至文本的范围查询,并且两端范围。结束的范围可以使用“*”通配符。

(1)日期范围(ISO-8601 时间GMT):birthday:[1990-01-01T00:00:00.000Z TO 1999-12-31T24:59:99.999Z]

(2)数字:age:[2000 TO *]

(3)文本:content:[a TO a]# solr

solr安装与使用

原文:https://www.cnblogs.com/ygfcoder/p/13496525.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!