利用SOLR搭建企业搜索平台 之七(solr使用问题集)
Solr安装使用教程

Solr安装使⽤教程⼀、安装1.1 安装jdksolr是基于lucene⽽lucene是java写的,所以solr需要jdk----当前安装的solr-7.5需要jdk-1.8及以上版本,下载安装jdk并设置JAVA_HOME即可。
jdk下载地址:1.2 安装solr下载solr,然后解压即可,windows和linux都可以下.tgz(.tgz本质是.tar.gz)和.zip解压出来都⼀样的。
solr下载地址:要注意图中的链接是下载页⾯的链接并不是solr⽂件的链接,直接wget链接就报gzip: solr-7.5.0.tgz: not in gzip format或End-of-central-directory signature not found.了。
1.3 设置系统资源限制设置最⼤进程数t和打开⽂件数为65000(可能其他⼀些资源也要修改但我安装时没见有其他问题,⽂档也没看到专门说明)ulimit -u 65000ulimit -n 65000⼆、solr基本⽤法对于没⽤过的新⼿⽽⾔,⾸先最关⼼的是怎么运⾏起来看这东西长什么样其他什么⾼级⽤法后⽽再说,这⾥我们就来做这件事。
2.1 启停进⼊解压后⽂件的bin⽬录,执⾏:# 启动./solr start# 停⽌./solr stopsolr默认拒绝以root⾝份启动,root加-force选项可以启动,但后续进⾏操作(如创建核⼼等)还是会有问题,推荐使⽤普通⽤户动。
启动完成后默认监听8983端⼝,访问可见界⾯如下2.2 solr核⼼(core)创建与删除在上⾯启动起来的页⾯可以看到solr就是就是这么⼀个界⾯简陋的东西----页⾯简单(没⼏个页⾯)加布局丑陋。
solr中⼀个核⼼(core)相当于⼀个搜索引擎,然后上传⽂件时也是上传到指定核⼼;solr可以建⽴多个solr。
solr默认没有core,我们先来创建⼀个core。
通过命令创建和删除core:# 创建core,-c指定创建的core名./solr create -c test_core1# 删除core,-c指定删除的core名./solr delete -c test_core1完成后回刷新solr界⾯,点击下拉“Core Selector”即可看到刚才建⽴的core,选择core即可进⼊core的管理界⾯,如下图。
solr使用流程

solr使用流程Solr使用流程一、概述Solr是一个开源的企业级搜索平台,基于Apache Lucene构建。
它提供了强大的全文搜索、分布式搜索、面向文档的搜索和高级搜索功能。
Solr的使用流程可以分为以下几个步骤:准备环境、创建索引、搜索数据。
二、准备环境在开始使用Solr之前,首先需要准备好运行环境。
Solr可以运行在各种操作系统上,包括Windows、Linux和Mac OS。
在安装Solr 之前,确保已经安装了Java Development Kit(JDK),并配置好了JAVA_HOME环境变量。
然后,从Solr官网下载最新版本的Solr,并解压到本地目录中。
三、创建索引1. 定义Schema在开始创建索引之前,需要定义Schema。
Schema是Solr中的模式文件,用于定义索引字段的类型、分析器和其他属性。
可以使用任何文本编辑器打开schema.xml文件,并根据需求进行修改。
常见的字段类型包括文本类型、日期类型、布尔类型等。
2. 导入数据在定义好Schema之后,需要将数据导入到Solr中。
Solr支持多种数据导入方式,包括手动导入和自动导入。
手动导入可通过提交XML或JSON格式的数据来实现,而自动导入则可以通过配置数据源和定时任务来实现。
3. 创建索引数据导入完成后,即可创建索引。
在Solr中,索引是由一系列的文档组成,每个文档都包含多个字段。
可以使用Solr提供的API来创建索引,也可以使用Solr的客户端工具来操作。
创建索引的过程包括向Solr提交文档、更新索引和删除索引等操作。
四、搜索数据创建索引完成后,即可开始搜索数据。
Solr提供了丰富的搜索功能,可以通过关键字、范围、过滤条件等进行高级搜索。
可以使用Solr 提供的查询语法来构建查询语句,并通过HTTP请求将查询发送给Solr服务器。
Solr会返回与查询条件匹配的文档列表。
1. 构建查询语句在构建查询语句时,需要考虑搜索的字段、搜索的关键字和搜索的条件。
Solr的原理及使用

Solr的原理及使⽤1.Solr的简介Solr是⼀个独⽴的企业级搜索应⽤服务器,它对外提供类似于Web-service的API接⼝。
⽤户可以通过http请求,向搜索引擎服务器提交⼀定格式的XML⽂件,⽣成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
2.⼯作原理solr是基于Lucence开发的企业级搜索引擎技术,⽽lucence的原理是倒排索引。
那么什么是倒排索引呢?接下来我们就介绍⼀下lucence倒排索引原理。
假设有两篇⽂章1和2:⽂章1的内容为:⽼超在卡⼦门⼯作,我也是。
⽂章2的内容为:⼩超在⿎楼⼯作。
由于lucence是基于关键词索引查询的,那我们⾸先要取得这两篇⽂章的关键词。
如果我们把⽂章看成⼀个字符串,我们需要取得字符串中的所有单词,即分词。
分词时,忽略”在“、”的“之类的没有意义的介词,以及标点符号可以过滤。
我们使⽤Ik Analyzer实现中⽂分词,分词之后结果为:⽂章1:⽂章2:接下来,有了关键词后,我们就可以建⽴倒排索引了。
上⾯的对应关系是:“⽂章号”对“⽂章中所有关键词”。
倒排索引把这个关系倒过来,变成: “关键词”对“拥有该关键词的所有⽂章号”。
通常仅知道关键词在哪些⽂章中出现还不够,我们还需要知道关键词在⽂章中出现次数和出现的位置,通常有两种位置:a.字符位置,即记录该词是⽂章中第⼏个字符(优点是关键词亮显时定位快);b.关键词位置,即记录该词是⽂章中第⼏个关键词(优点是节约索引空间、词组(phase)查询快),lucene中记录的就是这种位置。
加上出现频率和出现位置信息后,我们的索引结构变为:实现时,lucene将上⾯三列分别作为词典⽂件(Term Dictionary)、频率⽂件(frequencies)、位置⽂件 (positions)保存。
其中词典⽂件不仅保存有每个关键词,还保留了指向频率⽂件和位置⽂件的指针,通过指针可以找到该关键字的频率信息和位置信息。
全文检索引擎Solr系列——Solr核心概念、配置文件

全⽂检索引擎Solr系列——Solr核⼼概念、配置⽂件DocumentDocument是Solr索引(动词,indexing)和搜索的最基本单元,它类似于关系数据库表中的⼀条记录,可以包含⼀个或多个字段(Field),每个字段包含⼀个name和⽂本值。
字段在被索引的同时可以存储在索引中,搜索时就能返回该字段的值,通常⽂档都应该包含⼀个能唯⼀表⽰该⽂档的id字段。
例如:1 2 3 4 5 6 7 8<doc><field name="id">company123</field><field name="companycity">Atlanta</field><field name="companystate">Georgia</field><field name="companyname">Code Monkeys R Us, LLC</field> <field name="companydescription">we write lots of code</field> <field name="lastmodified">2013-06-01T15:26:37Z</field></doc>SchemaSolr中的Schema类似于关系数据库中的表结构,它以schema.xml的⽂本形式存在在conf⽬录下,在添加⽂当到索引中时需要指定Schema,Schema⽂件主要包含三部分:字段(Field)、字段类型(FieldType)、唯⼀键(uniqueKey)字段类型(FieldType):⽤来定义添加到索引中的xml⽂件字段(Field)中的类型,如:int,String,date,字段(Field):添加到索引⽂件中时的字段名称唯⼀键(uniqueKey):uniqueKey是⽤来标识⽂档唯⼀性的⼀个字段(Feild),在更新和删除时⽤到例如:12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23<schema name="example"version="1.5"><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"/><uniqueKey>id</uniqueKey><fieldType name="string"class="solr.StrField"sortMissingLast="true"/><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"/><!-- in this example, we will only use synonyms at query time<filter class="solr.SynonymFilterFactory"synonyms="index_synonyms.txt"ignoreCase="true"expand="false"/> --><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></schema>Field在Solr中,字段(Field)是构成Document的基本单元。
【黑马程序员】面试题-利用solr实现商品的搜索功能

【⿊马程序员】⾯试题-利⽤solr实现商品的搜索功能【⿊马程序员】⾯试题-利⽤solr实现商品的搜索功能问题提出:当我们访问购物⽹站的时候,我们可以根据我们随意所想的内容输⼊关键字就可以查询出相关的内容,这是怎么做到呢?这些随意的数据不可能是根据数据库的字段查询的,那是怎么查询出来的呢,为什么千奇百怪的关键字都可以查询出来呢?答案就是全⽂检索⼯具的实现,luncence采⽤了词元匹配和切分词。
举个例⼦:北京天安门------luncence切分词:北京京天天安安门等等这些分词。
所以我们搜索的时候都可以检索到。
有⼀种分词器就是ik中⽂分词器,它有细粒度切分和智能切分,即根据某种智能算法。
这就使⽤solr的最⼤的好处:检索功能的实现。
使⽤步骤;(1)solr服务器搭建,因为solr是⽤java5开发的,所以需要jdk和tomcat。
搭建部署(2)搭建完成后,我们需要将要展⽰的字段引⼊solr的库中。
配置sring与solr结合,⼯程启动的时候启动solr(3)将数据库中的查询内容导⼊到solr索引库,这⾥使⽤的是solrj的客户端实现的。
具体使⽤可以参考api(4)建⽴搜索服务,供客户端调⽤。
调⽤solr,查询内容,这中间有分页功能的实现。
solr⾼亮显⽰的实现。
(5)客户端接收页⾯的请求参数,调⽤搜索服务,进⾏搜索。
业务字段判断标准:1、在搜索时是否需要在此字段上进⾏搜索。
例如:商品名称、商品的卖点、商品的描述(这些相当于将标签给了solr,导⼊商品数据后,solr对这些字段的对应的商品的具体内容进⾏分词切分,然后,我们就可以搜索到相关内容了)2、后续的业务是否需要⽤到此字段。
例如:商品id。
需要⽤到的字段:1、商品id2、商品title3、卖点4、价格5、商品图⽚6、商品分类名称7、商品描述Solr中的业务字段:1、id——》商品id其他的对应字段创建solr的字段。
[AppleScript] 纯⽂本查看复制代码01 02 03 04 05 06 0708 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23stored="true"/>stored="false" multiValued="true"/>重新启动tomcatSolr 是Apache下的⼀个顶级开源项⽬,采⽤Java开发,它是基于Lucene的全⽂搜索服务器。
Solr搜索技术应用实战

Solr搜索技术应用实战Solr是一个开源的搜索平台,它基于Apache Lucene构建,提供丰富的API和可扩展性,已经成为了许多开发者选择的搜索引擎。
随着数据量的增加和业务场景的多样化,Solr的应用越来越广泛。
本文将从Solr的实战应用入手,为开发者提供一些技巧和经验。
一、Solr集群搭建Solr的性能和可靠性与硬件配置和部署状态密切相关。
在生产环境中建议使用集群部署,可以分布式处理查询请求,增加搜索并发能力和容错性。
Solr集群中每个节点可以作为独立的搜索服务器,提供相同的搜索服务。
一个完整的Solr集群由多个节点组成,分为SolrCloud和非SolrCloud两种模式,SolrCloud是集群管理的一种模式,在SolrCloud模式下,Solr 集群可以更方便地进行扩容和管理。
以下是SolrCloud集群的简要步骤:1. 准备ZooKeeper,SolrCloud使用ZooKeeper进行集群管理。
2. 启动Solr节点,并与ZooKeeper进行连接。
3. 使用Solr控制台创建集合,集合分片在所有节点之间平均分配。
4. 访问SolrCloud集群的URL,进行搜索等操作。
二、Solr数据导入Solr并不能直接从数据库或文件中获取数据,需要使用数据导入扩展来实现数据导入。
Solr数据导入流程大致如下:1. 配置数据源和数据目标,Solr支持多种数据源,包括数据库、文件、RSS等。
2. 配置数据导入的转换器和分词器,将数据源的数据转化为Solr需要的格式。
3. 配置数据导入的定时策略,Solr可以定时从数据源获取数据并导入。
以下是一个Solr数据导入的示例配置文件:```<dataConfig><dataSource name=\"jdbcDataSource\" type=\"JdbcDataSource\" driver=\"com.mysql.jdbc.Driver\"url=\"jdbc:mysql:\/\/localhost:3306\/test\" user=\"root\" password=\"123456\"\/><document><entity name=\"book\" query=\"SELECT * FROM book\"><field column=\"id\" name=\"id\"\/><field column=\"title\" name=\"title\"\/><field column=\"author\" name=\"author\"\/><field column=\"description\" name=\"description\"\/><\/entity><\/document><\/dataConfig>```以上配置会将MySQL数据库中的book表的所有数据导入Solr,并映射到Solr的id、title、author和description字段中。
solr使用手册

Solr全文检索服务一、企业站内搜索技术选型⏹在一些大型门户网站、电子商务网站等都需要站内搜索功能,使用传统的数据库查询方式实现搜索无法满足一些高级的搜索需求,比如:搜索速度要快、搜索结果按相关度排序、搜索内容格式不固定等,这里就需要使用全文检索技术实现搜索功能。
1.使用Lucene实现?什么是Lucene ?⏹Lucene是一个基于Java的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。
Lucene目前是Apache Jakarta(雅加达) 家族中的一个开源项目。
也是目前最为流行的基于Java开源全文检索工具包。
目前已经有很多应用程序的搜索功能是基于Lucene ,比如Eclipse 帮助系统的搜索功能。
Lucene能够为文本类型的数据建立索引,所以你只要把你要索引的数据格式转化的文本格式,Lucene 就能对你的文档进行索引和搜索●单独使用Lucene实现站内搜索需要开发的工作量较大,主要表现在:索引维护、索引性能优化、搜索性能优化等,因此不建议采用。
2.使用Google或Baidu接口?●通过第三方搜索引擎提供的接口实现站内搜索,这样和第三方引擎系统依赖紧密,不方便扩展,不建议采用。
3.使用Solr实现? Solr是什么?⏹Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。
Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
⏹Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引。
Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr返回Xml、json等格式的查询结果进行解析,组织页面布局。
搜索引擎solr环境配置、分词及索引操作

一、配置solr环境1、下载solr /dyn/closer.cgi/lucene/solr/此处用的是3.5 解压到D盘D:/solr/apache-solr-3.5.02、修改tomcat conf/server.xml<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" />添加编码的配置URIEncoding="UTF-8" (如不添加,中文检索时因为乱码搜索不到)3、配置solrTomcat conf/Catalina/localhost下添加solr.xml内容:<Context docBase="D:/solr/apache-solr-3.5.0/dist/apache-solr-3.5.0.war" debug="0"crossContext="true" ><Environment name="solr/home" type="ng.String"value="D:/solr/apache-solr-3.5.0/example/solr" override="true" /></Context>二、中文分词配置1、下载分词器:/p/mmseg4j/2、下载词库:/p/mmseg4j/downloads/detail?name=data.zip&can=2&q3、将解压后的mmseg4j-1.8.5目录下的mmseg4j-all-1.8.5.jar拷贝到Tomcat的webapps/solr/WEB-INF/lib目录下。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用SOLR搭建企业搜索平台之七(solr使用问题集)
某日,突发奇想,想写这么一个博客,希望记录下所有在solr中使用的毛病。
而且我希望广大的看友们也能一起来说说你们平时遇到的各种错误,这样大家才能一起更好的进步!
话不多说,进入正题
1》solr 做索引时报 Lock obtain timed out: SingleInstanceLock: write.lock
有个频繁做索引的应用,它同时也对外提供搜索服务。
大部分是 solr 1.3 的默认配置。
solr 做索引,有时候报:
Xml代码
2009-7-13 9:48:06 mon.SolrException log
严重: org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: SingleInstanceLock: write.lock
at org.apache.lucene.store.Lock.obtain(Lock.java:85)
at
org.apache.lucene.index.IndexWriter.init(IndexWriter.java:1140) at
org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:938) at
org.apache.solr.update.SolrIndexWriter.<init>(SolrIndexWriter.java:11 6)
...
是写锁取不到。
但重启 solr 又可以正常做,主要是运行时间长了就报这个错了。
还是看下配置吧。
看到 solr 1.3 默认的配置是:
Xml代码
<indexDefaults>
<!-- ... -->
<!--
This option specifies which Lucene LockFactory implementation to use.
single = SingleInstanceLockFactory - suggested for a read-only index
or when there is no possibility of another process trying
to modify the index.
native = NativeFSLockFactory
simple = SimpleFSLockFactory
(For backwards compatibility with Solr 1.2, 'simple' is the default
if not specified.)
-->
<lockType>single</lockType>
</indexDefaults>。