solr的简单使用说明

本文介绍Apache Solr的基本概念,包括安装、配置、数据上传及查询等步骤。Solr是一款基于Lucene的开源全文搜索引擎,支持多种文档格式和数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.solr简介

Apache Solr 是一个开源、高性能、跨平台、基于Lucene的全文搜索引擎,目标文档可以通过Http方式以xml、json、csv等不同数据格式上传并加载一个搜索集合中(collection),这个过程中solr会对上传的数据(文档)进行分词和建立索引操作,然后通过http接口查询结果,其中结果可以以xml、json、python等多种方式返回。Solr 中存储的资源是以 Document 为对象进行存储的。每个文档由一系列的 Field 构成,每个 Field 表示资源的一个属性。Solr 中的每个 Document 需要有能唯一标识其自身的属性,默认情况下这个属性的名字是 id,在 Schema 配置文件(schema.xml)中使用:<uniqueKey>id</uniqueKey>进行描述。solr有两个核心文件,solrconfig.xml和schema.xml。solrconfig.xml是solr的基础文件,里面配置了各种web请求处理器、请求响应处理器、日志、缓存等;schema.xml配置映射了各种数据类型的索引方案,分词器的配置、索引文档中包含的字段也在此配置。
工作中主要用来分词和搜索,简单的工作原理是:利用分词器对数据源进行分词处理,然后根据分词结果建立索引库;查询的时候,利用分词器对查询语句进行分词,根据查询语句分词的结果在索引库中进行匹配,最后返回结果。

1.安装solr

solr的安装比较简单,本例中使用solr-4.10.3版本,直接将下载好的安装包solr-4.10.3.zip解压至指定目录就好了。
2.启动solr
进入$SOLR_HOME/example目录下,执行 java -jar start.jar就可以了,默认开启的端口为8983
3.上传测试数据至solr:
进入到 $SOLR_HOME/example/ exampledocs目录,可以通过命令 java -jar post.jar solr.xml monitor.xml进行文件上传
上传数据至solr时,solr会自动建立索引。以上命令默认 会将数据上传至 collection1中。
相当于:
java -Durl=http://localhost:8983/solr/collection1/update -jar SOLR_HOME/example/exampledocs/post.jar  solr.xml monitor.xml
如果要指定上传的数据进入到哪个collection,可以通过上面命令操作
4.配置solr
4.1 增加collection
solr默认有一个collection1,如果需要新增collection2,可以将 $SOLR_HOME /example/solr中的collection1复制到当前目录,并重命名为collection2,
然后进入到collection2目录中修改配置文件core.properties文件,将“name=collection1”改为“name=collection2”,然后重启solr就可以了
4.2 增加字段
我们在向solr上传数据时,要按照solr规定的数据格式来组织好数据,数据类型可以为xml、json、csv等(solr中对文件的后缀名不关心,可以没有后缀名),但每种数据类型都有统一的格式规范,也可以说是字段规范,数据格式规范是在 $SOLR_HOME /example/solr/collection1/conf/schema.xml文件中进行配置,其中,在collection1中已经有了默认提供的诸如
id(主键,不可重命名)、name、price等字段。
比如,xml类型的文档的数据格式参如下:
   
<add>
  1. <doc>
    <!-- id为主键-->
    <field name="id">3007WFP</field>
    <field name="name">Dell Widescreen UltraSharp 3007WFP</field>
    <field name="manu">Dell, Inc.</field>
    <!-- Join -->
    <field name="manu_id_s">dell</field>
    <field name="cat">electronics and computer1</field>
    <field name="features">30" TFT active matrix LCD, 2560 x 1600, .25mm dot pitch, 700:1 contrast</field>
    <field name="includes">USB cable</field>
    <field name="weight">401.6</field>
    <field name="price">2199</field>
    <field name="popularity">6</field>
    <field name="inStock">true</field>
    <!-- Buffalo store -->
    <field name="store">43.17614,-90.57341</field>
    </doc>
     <doc>******</doc>
</add>


如果需要新增字段的话,只要在配置文件中新增一条配置就行了,比如,新增"tag"字段:
<field name="tag" type="text_general" indexed="true" stored="true"/>
然后重启solr就可以了,这时就可以上传具有如下数据结构的文件了。
   
<add>
<doc><field name='id'>1001</field><field name='tag'>腾讯:1 社交/沟通,通信,即时通信:1 资讯:1</field></doc>
<doc><field name='id'> 1002 </field><field name='tag'>搜狗:1 工具/软件,应用,导航:1</field></doc>
<doc><field name='id'> 1003 </field><field name='tag'>社交/沟通,通信,即时通信:1</field></doc>
<doc><field name='id'> 1004 </field><field name='tag'>腾讯:1 资讯:1</field></doc>
<doc><field name='id'> 1005 </field><field name='tag'>腾讯:1 资讯:1</field></doc>
</add>
在solr中,提供了许多动态字段类型,这样就可以无需修改schema.xml配置增加字段就可以自定义数据类型了。
比如,我们可以用"age_i"自定义int型字段age_i,用"contry_s"自定义String类型字段contry_s,其中"*_i"表示Int型,
"*_s"表示String型,其他的自定义数据类型参考如下(在schema.xml中查看):



5.solr查询
5.1 界面查询
可以通过 http://localhost:8983/solr/#/collection1 进入collection的界面


进入之后,可以再左侧的选择框中切换collection。点击“query”就可以进去查询界面了,或者直接通过地址“ http://localhost:8983/solr/#/collection1/query进入


上图中,蓝色框用来输入查询条件,*:*表示检索所有的数据,冒号":"左表是关键字,右边是关键字的值,如果为*表示所有。
比如“id:1001”表示查询id值为1001的数据,“name:jack”表示查询name值为jack的数据 ,"name:*"表示查询所有有name字段的数据;
红色方框中用来选择查询结果返回的数据类型,可以选择xml、json、csv、python等类型。比如:


其中,查询条件是查询tag字段为"腾讯视频"的数据,在responseHeader中表示传入的相关参数说明,q表示查询的字段,wt表示返回的数据类型
在response中表示具体的查询结果,其中nameFound表示查询到的记录数量,start表示显示第几页,默认0表示显示第一页(其实,还有rows字段,默认为每页显示10条记录)
5.2 通过接口查询:
http://localhost:8983/solr/collection1/select?q=id:1001&wt=json&start=2&rows=100 &indent=true
其中,检索的collection为collection1,查询条件为id等于1001,返回数据类型为json,显示第三页,每页显示100条数据
http://localhost:8983/solr/collection1/select?q=tag:"腾讯视频"&wt=json &indent=true
表示查询tag值为"腾讯视频"的记录(默认显示第一页,每页10条记录)
注:如果查询的关键字字段为string类型,参数需要用引号( "" )括起来



1 概述 4 1.1 企业搜索引擎方案选型 4 1.2 Solr的特性 4 1.2.1 Solr使用Lucene且进行了扩展 4 1.2.2 Schema(模式) 5 1.2.3 查询 5 1.2.4 核心 5 1.2.5 缓存 5 1.2.6 复制 6 1.2.7 管理接口 6 1.3 Solr服务原理 6 1.3.1 索引 6 1.3.2 搜索 7 1.4 源码结构 8 1.4.1 目录结构说明 8 1.4.2 Solr home说明 9 1.4.3 solr的各包的说明 10 1.5 版本说明 11 1.5.1 1.3版本 11 1.5.2 1.4版本 12 1.6 分布式和复制 Solr 架构 13 2 Solr的安装与配置 13 2.1 在Tomcat下Solr安装 13 2.1.1 安装准备 13 2.1.2 安装过程 14 2.1.3 验证安装 15 2.2 中文分词配置 15 2.2.1 mmseg4j 15 2.2.2 paoding 19 2.3 多核(MultiCore)配置 22 2.3.1 MultiCore的配置方法 22 2.3.2 为何使用多core ? 23 2.4 配置文件说明 23 2.4.1 schema.xml 24 2.4.2 solrconfig.xml 25 3 Solr的应用 29 3.1 SOLR应用概述 29 3.1.1 Solr的应用模式 29 3.1.2 SOLR使用过程说明 30 3.2 一个简单的例子 30 3.2.1 Solr Schema 设计 30 3.2.2 构建索引 30 3.2.3 搜索测试 31 3.3 搜索引擎的规划设计 32 3.3.1 定义业务模型 32 3.3.2 定制索引服务 34 3.3.3 定制搜索服务 34 3.4 搜索引擎配置 34 3.4.1 Solr Schema 设计(如何定制索引的结构?) 34 3.5 如何进行索引操作? 36 3.5.1 基本索引操作 36 3.5.2 批量索引操作 37 3.6 如何进行搜索 39 3.6.1 搜索语法 39 3.6.2 排序 42 3.6.3 字段增加权重 42 3.6.4 Solr分词器、过滤器、分析器 42 3.6.5 Solr高亮使用 46 4 SolrJ的用法 46 4.1 搜索接口的调用实例 46 4.2 Solrj的使用说明 47 4.2.1 Adding Data to Solr 47 4.2.2 Directly adding POJOs to Solr 49 4.2.3 Reading Data from Solr 51 4.3 创建查询 51 4.4 使用 SolrJ 创建索引 52 4.5 Solrj包的结构说明 53 4.5.1 CommonsHttpSolrServer 53 4.5.2 Setting XMLResponseParser 53 4.5.3 Changing other Connection Settings 53 4.5.4 EmbeddedSolrServer 54 5 Solr的实际应用测试报告 54 5.1 线下压力测试报告 54 5.2 线上环境运行报告 54 6 solr性能调优 55 6.1 Schema Design Considerations 55 6.1.1 indexed fields 55 6.1.2 stored fields 55 6.2 Configuration Considerations 55 6.2.1 mergeFactor 55 6.2.2 mergeFactor Tradeoffs 56 6.3 Cache autoWarm Count Considerations 56 6.4 Cache hit rate(缓存命中率) 56 6.5 Explicit Warming of Sort Fields 56 6.6 Optimization Considerations 56 6.7 Updates and Commit Frequency Tradeoffs 56 6.8 Query Response Compression 57 6.9 Embedded vs HTTP Post 57 6.10 RAM Usage Considerations(内存方面的考虑) 57 6.10.1 OutOfMemoryErrors 57 6.10.2 Memory allocated to the Java VM 57 7 FAQ 58 7.1 出现乱码或者查不到结果的排查方法: 58
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值