solr删除索引 example8983端口怎么修改

solr-wiki----solr分布式索引 - mxsfengg - ITeye技术网站
博客分类:
What is Distributed Search?
当一个索引越来越大,达到一个单一的系统无法满足磁盘需求的时候,或者一次简单的查询实在要耗费很多的时间的时候,我们就可以使用solr的分布式索引了。在分布式索引中,原来的大索引,将会分成多个小索引(索引并不定规模小,之前称之为小索引相对于之前的整个索引来讲的),solr可以将从这些小索引返回的结果合并,然后返回给客户端。
如果当前的solr查询请求能够很快被处理,而你只是希望整个搜索系统的处理能力,那么你可以看看这篇文章。
Distributed Searching
参数“shards”能够使请求被分发到shards所指定的小索引上。
shards 的格式
:host:port/base_url[,host:port/base_url]*
目前只有查询请求才能够被分发。能够处理这种要求分发的请求的组件包括standard request handler 、以及它的子类、任何使用 支持分发的组件的其他handler。
目前支持分布式查询的组件有:
查询组件-----根据一个请求返回一个文档集。
面查询组件-----目前只支持排序的数字类的域。solr1.4将可以支持字符类型的域
高亮显示组件
debug组件。
对于分布式搜索组件,你也可以参考
Distributed Searching Limitations
索引的文档必须有一个 唯一键
当拥有相同的id的文档被查询到时,solr将选择第一个文档。其他的结果将被丢弃。
No distributed idf
不支持“竞价排名”组件 QueryElevationComponent
在处理的过程中,也即是 stage过程中,索引是有可能发生变化的。这样在索引更新的时刻,可能会发现搜索的结果跟索引不匹配的现象。
目前并不支持 时间类型的 facetting搜索。(将在solr1.4被支持)
目前只支持 能够排序的域的 facet搜索
shard 的数量会受到get请求的方法的限制,大多数的web 服务器,只支持4000个字符左右的get请求。
当“start”这个参数很大的时候,效率比较低下。举个例子,你发起一个请求,参数start=50000 ,rows=25 .被请求的索引的每个shard有500,000个文档。这时候,就会导致500,000条记录,在网络上被传输。
Distributed Deadlock
每个小索引,都有可能既接收顶级的 查询请求,也 向其他的小索引发出次级的查询请求。在这里,你就要小心了,http服务器中设置的能够处理的http请求的线程数一定要大于 这个小索引所接收到的 顶级请求和次级请求的总和。如果配置没有这样配好的话,一个由分发而产生的死锁很有可能会发生。
现在我们来试想下一种最简单的情况,只有两个小索引,每个小索引只能够起一个线程来处理Http 请求。两个索引都能接收顶级请求,并将请求分发给另一个索引。因为它们没有多余的线程可以处理多于一个的请求,所以 servlet容器就会阻塞 刚来的请求,这种情况一直持续到正在处理的请求被处理完毕。(但是,那个正在处理的请求永远也不会被处理完毕,因为它正在等待它分发出去的请求的回应,而这个分发出去的请求被阻塞了)。
关于死锁,目前笔者想到的方法是设定分发请求的超时时间。这个应该不难实现。
Distributed Indexing
怎样建立小索引,这点随用户的喜好而定。一种很简单的方法决定那条记录放在那个索引上可以使用类似这样的一种公式 uniqueId.hashCode() % numServers。
出于测试目的,我们在一台机器的两个不同的端口启动 solr 服务。
#make a copy
cp -r example example7574
#change the port number
perl -pi -e s//g example7574/etc/jetty.xml
example7574/exampledocs/post.sh
#in window 1, start up the server on port 8983
cd example
java -server -jar start.jar
#in window 2, start up the server on port 7574
cd example7574
java -server -jar start.jar
#in window 3, index some example documents to each server
cd example/exampledocs
./post.sh [a-m]*.xml
cd ../../example7574/exampledocs
./post.sh [n-z]*.xml
#now do a distributed search across both servers with your browser or curl
curl 'http://localhost:8983/solr/select?shards=localhost:8983/solr,localhost:7574/solr&indent=true&q=ipod+solr'
论坛回复 /
(1 / 4877)
浏览: 99289 次
来自: 广州
不错的文章, 丝丝入扣 有条理
如果我想自己写一个类似于example1.conf,为什么运行 ...
请教一个问题,我用solr对数据库某张存有大数量的表建索引,假 ...
兄弟,你测试通过不?还有forceElevation=true ...在Tomcat下部署Solr Example -
- ITeye技术网站
博客分类:
1、安装并配置好tomcat
2、在tomcat的目录conf/Catalina/localhost/solr.xml下创建该文件,若Catalina等文件夹不存在则手动创建
文件内容如下:
&?xml version="1.0" encoding="utf-8"?&
&Context docBase="/home/chenzehe/apache-solr-3.6.0/dist/apache-solr-3.6.0.war" debug="0" crossContext="true" &
&Environment name="solr/home" type="java.lang.String" value="/home/chenzehe/tomcat6_solr/solr" override="true" /&
&/Context&
docBase为solr的war文件,启动tomcat后会被解压到tomcat/webapps/solr下,Environment配置solr.home目录,从solr包中example文件夹下的solr配置文件拷贝过来既可。
3、启动tomcat后,输入http://192.168.0.248:9080/solr/ ,看到成功界面则说明安装成功。
上面配置虽然表面上看成功了,但还有些不完善的地方,如访问路径一直下/solr路径下,访问solr界面http://192.168.0.248:9080/solr/browse不能访问,下面以别一种方式重新部署。
4、创建文件夹/home/chenzehe/webapps/solr 存放solr项目文件,把上面在放在tomcat/webapps/solr下的文件copy到该文件夹下
5、修改tomcat conf下server.xml文件配置,把端口改为9080,加入 URIEncoding="UTF-8"防止中文搜索乱码,如下:
&Connector port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/&
在&Host&节点下添加项目配置:
&Context path="" docBase="/home/chenzehe/webapps/solr" debug="0"/&
6、在项目中web.xml文件中配置solr.home路径,编辑web.xml文件,加入如下内容:
&env-entry&
&env-entry-name&solr/home&/env-entry-name&
&env-entry-value&/home/chenzehe/webapps/solrhome/solr&/env-entry-value&
&env-entry-type&java.lang.String&/env-entry-type&
&/env-entry&
其中env-enty-value值为solr.home目录。
7、启动tomcat,输入http://192.168.0.248:9080,不用输入/solr,既可访问项目。
8、访问搜索界面http://192.168.0.248:9080/browse失败,原因是solrconfig.xml配置文件中指定的jar包路径不对,从examples中copy过来的solrconfig.xml配置文件中指定jar文件如下:
&lib dir="../../dist/" regex="apache-solr-cell-\d.*\.jar" /&
&lib dir="../../contrib/extraction/lib" regex=".*\.jar" /&
&lib dir="../../dist/" regex="apache-solr-clustering-\d.*\.jar" /&
&lib dir="../../contrib/clustering/lib/" regex=".*\.jar" /&
&lib dir="../../dist/" regex="apache-solr-dataimporthandler-\d.*\.jar" /&
&lib dir="../../contrib/dataimporthandler/lib/" regex=".*\.jar" /&
&lib dir="../../dist/" regex="apache-solr-langid-\d.*\.jar" /&
&lib dir="../../contrib/langid/lib/" regex=".*\.jar" /&
&lib dir="../../dist/" regex="apache-solr-velocity-\d.*\.jar" /&
&lib dir="../../contrib/velocity/lib" regex=".*\.jar" /&
注意dir="../../contrib/extraction/lib"这个地址的相对位置是对于$SOLR_HOME/conf/
来说的,而不是$SOLR_HOME/conf/solrconfig.xml。从解压的solr文件夹中中copycontrib和dist到webapps/solr/bin文件夹下,把上面dir属性值改为绝对路径,指向相应的dist和contrib文件夹:
&lib dir="/home/chenzehe/webapps/solr/bin/dist/" regex="apache-solr-cell-\d.*\.jar" /&
&lib dir="/home/chenzehe/webapps/solr/bin/contrib/extraction/lib" regex=".*\.jar" /&
&lib dir="/home/chenzehe/webapps/solr/bin/dist/" regex="apache-solr-clustering-\d.*\.jar" /&
&lib dir="/home/chenzehe/webapps/solr/bin/contrib/clustering/lib/" regex=".*\.jar" /&
&lib dir="/home/chenzehe/webapps/solr/bin/dist/" regex="apache-solr-dataimporthandler-\d.*\.jar" /&
&lib dir="/home/chenzehe/webapps/solr/bin/contrib/dataimporthandler/lib/" regex=".*\.jar" /&
&lib dir="/home/chenzehe/webapps/solr/bin/dist/" regex="apache-solr-langid-\d.*\.jar" /&
&lib dir="/home/chenzehe/webapps/solr/bin/contrib/langid/lib/" regex=".*\.jar" /&
&lib dir="/home/chenzehe/webapps/solr/bin/dist/" regex="apache-solr-velocity-\d.*\.jar" /&
&lib dir="/home/chenzehe/webapps/solr/bin/contrib/velocity/lib" regex=".*\.jar" /&
9、重启动tomcat,输入http://192.168.0.248:9080/browse访问搜索界面没有报错,但是没有样式,发现该页面中所有连接样式和脚本的文件都指定为solr路径下。
10、修改tomcat配置文件,把项目恢复到solr路径下:
&Context path="/solr" docBase="/home/chenzehe/webapps/solr" debug="0"/&
重启动tomcat,访问http://192.168.0.248:9080/solr/browse 能正常访问。
参考官方wiki:http://wiki.apache.org/solr/SolrTomcat
浏览: 118479 次
来自: 杭州
请教一个问题。现在互联网业务的数据库通常用分片方式来连接一组数 ...
关于多线程更多的面试题,这篇文章有详细介绍:http://ww ...
可能全部是北京或者全部是美国,但不会出现美国-杭州或中国纽约这 ...SolrCloud_中华文本库
第2页/共18页
文本预览:
有多个独立里的 SolrCores 组成。
3、Getting Started
Download Solr 4-Beta or greater: http://lucene.apache.org/solr/downloads.html If you haven't yet, go through the simple Solr Tutorial to familiarize yourself with Solr. Note: reset all configuration and remove documents from the tutorial before going through the cloud features. Copying the example directories with pre-existing Solr indexes will cause document counts to be off. Solr embeds and uses Zookeeper as a repository for cluster configuration and coordination - think of it as a distributed filesystem that contains information about all of the Solr servers If you want to use a port other than 8983 for Solr, see the note about solr.xml under Parameter Reference below. 启动 下载 Solr4-Beta 或更高版本 如果你还没了解,通过简单的 Solr 指南让自己熟悉 Solr。注意:在通过指南了解云特点前,重设所 有的配置和移除指南的文档.复制带有预先存在的 Solr 索引的例子目录将导致文档计数关闭
Solr 内嵌使用了 Zookeeper 作为集群配置和协调运作的仓储。 协调考虑作为一个包含所有 Solr 服务 信息的分布式文件系统。 如果你想用一个其他的而不是 8983 作为 Solr 端口,去看下面’ Parameter Reference’部分下的关于 solr.xml 注解
A. Example A: Simple two shard cluster 例 A:简单的 2 个 shard 集群
This example simply creates a cluster consisting of two solr servers representing two different shards of a collection. 这个例子简单的创建了一个代表一个独立索引块的两个不同的 shards 的两个 solr 服务组成的集群。 Since we'll need two solr servers for this example, simply make a copy of the example directory for the second server -- making sure you don't have any data already indexed. 从我们将需要两个 solr 服务器,简单的复制例子目录副本作为第二个服务器时,要确保没有任何索 引存在。 rm -r example/solr/collection1/data/* cp -r example example2 This command starts up a Solr server and bootstraps a new solr cluster. 下面的命令启动了一个 solr 服务同时引导了一个新的 solr 集群 cd example java -Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf -DzkRun -DnumShards=2 -jar start.jar
-DzkRun causes an embedded zookeeper server to be run as part of this Solr server. -Dbootstrap_confdir=./solr/collection1/conf Since we don't yet have a config in zookeeper, this parameter causes the local configuration directory ./solr/conf to be uploaded as the "myconf" config. The name "myconf" is taken from the "collection.configName" param below. -Dcollection.configName=myconf sets the config to use for the new collection. Omitting this param will cause the config name to default to "configuration1".
-DnumShards=2 the number of logical partitions we plan on splitting the index into. -DzkRun 该参数将促使一个内嵌的 zookeeper 服务作为
第2页/共18页
寻找更多 ""Solr学习总结
- 白强 - ITeye技术网站
博客分类:
一、 SOLR搭建企业搜索平台 运行环境: 运行容器:Tomcat6.0.20 Solr版本:apache-solr-1.4.0 分词器:mmseg4j-1.6.2 词库:sogou-dic 准备工作: 下载tomcat 6.0.20:http://tomcat.apache.org/download-60.cgi 下载solr:/lucene/solr/1.4.0/ 详情请见:http://wiki.apache.org/solr/Solr1.4 下载分词器:/p/mmseg4j/ 下载sougou词库: /p/mmseg4j/downloads/detail?name=sogou-dic-utf8.zip&can=2&q= 开始配置: 1、安装tomcat 2、将下载的solr包下面的dist文件夹中的apache-solr-1.4.0.war 拷贝到 tomcat的webapps 并且改名为 solr.war
一般情况下会自动生成相应的文件夹。 3、新建一个 solr-tomcat文件夹,我是把这个文件夹建立在C盘根目录,你可以采用同样方式,也可以不这样,放哪由你决定。 建立好该文件夹以后,在把它下面在建立一个solr文件夹,把下载的solr包里面的example\solr文件夹下面的所有文件放入到 solr里面。 4、最后一步 配置 solr.home,可以有三种方式。 1)基于当前路径的方式
这种情况需要在c:\solr-tomcat\目录下去启动tomcat,Solr查找./solr,因此在启动时候需要切换到c:\solr- tomcat\
2)基于环境变量
windows在环境变量中建立solr.home,值为c:\solr-tomcat
linux在当前用户的环境变量中(.bash_profile)或在catalina.sh中添加如下环境变量 export JAVA_OPTS="$JAVA_OPTS -Dsolr.solr.home=/opt/solr-tomcat/solr"
3)基于JNDI
在tomcat的conf文件夹建立Catalina文件夹,然后在Catalina文件夹中在建立localhost文件夹,在该文件夹下面建立 solr.xml,其中内容: &Context docBase="C:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/solr" debug="0" crossContext="true" &
&Environment name="solr/home" type="java.lang.String" value="c:/solr-tomcat/solr" override="true" /&
&/Context& 5、打开浏览器 输入:http://localhost:8080/solr/admin/
(其中的端口根据情况输入 默认是8080) 就可以访问solr服务了 6、如果出现如下图示,表示配置成功。 二、 SOLR搭建企业搜索平台--中文分词 这篇文章,主要说的是 怎么在solr中加入中文分词 1、下载分词器:/p/mmseg4j/ 2、将解压后的mmseg4j-1.8.2目录下的mmseg4j-all-1.8.2.jar拷贝到Tomcat _HOME\webapps\solr\WEB-INF\lib目录下。 3、添加词库:在C:\solr-tomcat\solr目录下新建dic文件夹,将解压后的sogou-dic\data目录下的 words.dic拷贝到C:\solr-tomcat\solr\dic目录下。 4、更改schema.xml(c:\solr-tomcat\solr\conf\)文件,使分词器起到作用。 更改内容为: &types& …… &!--mmseg4j field types--&
&fieldType name="textComplex" class="solr.TextField" positionIncrementGap="100" &
&analyzer&
&tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="C:\solr-tomcat\solr\dic"/&
&filter class="solr.LowerCaseFilterFactory"/&
&/analyzer&
&/fieldType&
&fieldType name="textMaxWord" class="solr.TextField" positionIncrementGap="100" &
&analyzer&
&tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="C:\solr-tomcat\solr\dic"/&
&filter class="solr.LowerCaseFilterFactory"/&
&/analyzer&
&/fieldType&
&fieldType name="textSimple" class="solr.TextField" positionIncrementGap="100" &
&analyzer&
&tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="C:\solr-tomcat\solr\dic"/&
&filter class="solr.LowerCaseFilterFactory"/&
&/analyzer&
&/fieldType& …… &/types& 注:dicPath="C:\solr-tomcat\solr\dic"是你的词库路径,我的是放在了C:\solr-tomcat\solr\dic目录下。 &fields& …… &field name="simple" type="textSimple" indexed="true" stored="true" multiValued="true"/&
&field name="complex" type="textComplex" indexed="true" stored="true" multiValued="true"/&
&field name="text" type="textMaxWord" indexed="true" stored="true" multiValued="true"/& …… &/fields& &copyField source="simple" dest="text"/& &copyField source="complex" dest="text"/& 重启你的tomcat。 访问:http://localhost:8089/solr/admin/analysis.jsp可以看 mmseg4j 的分词效果。在 Field 的下拉菜单选择 name,然后在应用输入 complex。分词的结果,如下图: 好了,可以运行起来了,那就添加个文档试下,在 解压后的apache-solr-1.4.0\example\exampledocs目录下创建 mmseg4j-solr-demo-doc.xml 文档,内容如下:
&field name="id"&1&/field&
&field name="text"&昨日,记者从解放军总参谋部相关部门获悉,截至3月28日,解放军和武警部队累计出动7.2万人次官兵支援地方抗旱救灾。组织民兵预备役人员20.2万人 次支援地方抗旱救灾。&/field&
&field name="id"&2&/field&
&field name="text"&下半年房价调整就是挤水分 房价回不到去年水平。&/field&
&field name="id"&3&/field&
&field name="text"&solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目。&/field&
&field name="id"&4&/field&
&field name="text"&中国人民银行是中华人民共和国的中央银行。&/field&
&/add& 然后在 cmd 下运行 post.jar,如下: F:\lucene\solr\apache-solr-1.4.0\example\exampledocs&java -Durl=http://localhost:8089/solr/update -Dcommit=yes -jar post.jar mmseg4j-solr-demo-doc.xml 查看是否有数据,访问:http://localhost:8089/solr/admin/ 在Query String: 中输入“中国”,显示如下图所示: 到这里,分词成功。至于schema.xml中的配置属性会在下一章中进行详细的介绍。 [Solr分词顺序] Solr建立索引和对关键词进行查询都得对字串进行分词,在向索引库中添加全文检索类型的索引的时候,Solr会首先用空格进行分词,然后把分词结果依次使用指定的过滤器进行过滤,最后剩下的结果才会加入到索引库中以备查询。分词的顺序如下: 索引 1:空格whitespaceTokenize 2:过滤词(停用词,如:on、of、a、an等) StopFilter 3:拆字WordDelimiterFilter 4:小写过滤LowerCaseFilter 5:英文相近词EnglishPorterFilter 6:去除重复词RemoveDuplicatesTokenFilter 查询 1:查询相近词 2:过滤词 3:拆字 4:小写过滤 5:英文相近词 6:去除重复词 以上是针对英文,中文的除了空格,其他都类似。 三、 SOLR搭建企业搜索平台—配置文件详解 在solr里面主要的就是solr的主目录下面的schema.xml,solrConfig.xml。 首先:schema.xml schema.xml,这个相当于数据表配置文件,它定义了加入索引的数据的数据类型的。主要包括types、fields和其他的一些缺省设置。 1、首先需要在types结点内定义一个FieldType子结点,包括name,class,positionIncrementGap等等一些参数,name就是这个FieldType的名称,class指向org.apache.solr.analysis包里面对应的class名称,用来定义这个类型的行为。在FieldType定义的时候最重要的就是定义这个类型的数据在建立索引和进行查询的时候要使用的分析器analyzer,包括分词和过滤。例如: &fieldType name="text" class="solr.TextField" positionIncrementGap="100"&
&analyzer type="index"&
&tokenizer class="solr.WhitespaceTokenizerFactory"/&
&!-- in this example, we will only use synonyms at query time
&filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/&
&!-- Case insensitive stop word removal.
enablePositionIncrements=true ensures that a 'gap' is left to
allow for accurate phrase queries.
&filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
&filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/&
&filter class="solr.LowerCaseFilterFactory"/&
&filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/&
&filter class="solr.RemoveDuplicatesTokenFilterFactory"/&
&/analyzer&
&/fieldType& 在index的analyzer中使用 solr.WhitespaceTokenizerFactory这个分词包,就是空格分词,然后使用 solr.StopFilterFactory,solr.WordDelimiterFilterFactory,solr.LowerCaseFilterFactory,solr.EnglishPorterFilterFactory,solr.RemoveDuplicatesTokenFilterFactory 这几个过滤器。在向索引库中添加text类型的索引的时候,Solr会首先用空格进行分词,然后把分词结果依次使用指定的过滤器进行过滤,最后剩下的结果才会加入到索引库中以备查询。Solr的analysis包并没有带支持中文的包,在第二篇文章中详细讲了怎样添加mmseg4j中文分词器,详情请参见/blog/641548 2、接下来的工作就是在fields结点内定义具体的字段(类似数据库中的字段),就是filed,filed定义包括name,type(为之前定义过的各种FieldType),indexed(是否被索引),stored(是否被储存),multiValued(是否有多个值)等等。 例: &fields& &field name="id" type="integer" indexed="true" stored="true" required="true" /& &field name="name" type="text" indexed="true" stored="true" /& &field name="summary" type="text" indexed="true" stored="true" /& &field name="author" type="string" indexed="true" stored="true" /& &field name="date" type="date" indexed="false" stored="true" /& &field name="content" type="text" indexed="true" stored="false" /& &field name="keywords" type="keyword_text" indexed="true" stored="false" multiValued="true" /& &field name="all" type="text" indexed="true" stored="false" multiValued="true"/& &/fields& field的定义相当重要,有几个技巧需注意一下,对可能存在多值得字段尽量设置 multiValued属性为true,避免建索引是抛出错误;如果不需要存储相应字段值,尽量将stored属性设为false。 3、建议建立了一个拷贝字段,将所有的全文字段复制到一个字段中,以便进行统一的检索: &field name="all" type="text" indexed="true" stored="false" multiValued="true"/& 并在拷贝字段结点处完成拷贝设置: &copyField source="name" dest="all"/& &copyField source="summary" dest="all"/& 注:“拷贝字段”就是查询的时候不用再输入:userName:张三 and userProfile:张三的个人简介。直接可以输入"张三"就可以将“名字”含“张三”或者“简介”中含“张三”的又或者“名字”和“简介”都含有“张三”的查询出来。他将需要查询的内容放在了一个字段中,并且默认查询该字段设为该字段就行了。 4、除此之外,还可以定义动态字段,所谓动态字段就是不用指定具体的名称,只要定义字段名称的规则,例如定义一个 dynamicField,name 为*_i,定义它的type为text,那么在使用这个字段的时候,任何以_i结尾的字段都被认为是符合这个定义的,例 如:name_i,gender_i,school_i等。 schema.xml配置文件大体上就是这样,更多细节请参见solr wiki http://wiki.apache.org/solr/SchemaXml。 四、 SOLR搭建企业搜索平台--MultiCore Solr Multicore 是 solr 1.3 的新特性。其目的一个solr实例,可以有多个搜索应用。 我们知道你既可以把不同类型的数据放到同一index中,也可以使用分开的多indexes。基于这一点,你只需知道如何使用多 indexes(实际上就是运行Solr的多实例)。尽管如此,为每一个类型添加一个完整的Solr实例会显得太臃肿庞大。Solr1.3引入了Solr core的概念,该方案使用一个Solr实例管理多个indexes,这样就有热点core(hot core)的重读(reloading)与交换(swap,通常是读index与写index交换),那么管理一个 core或index也容易些。每个Solr core由它自己的配置文件和索引数据组成。在多core执行搜索和索引几乎和没有使用core一样。你只是添加core的名字为各自不同的URL。单 core情况下的如下搜索: http://localhost:8983/solr/select?q=dave%20matthews 在多core环境下,你可以通过如下方式访问一个名为mbartists的core: http://localhost:8983/solr/core0/select?q=dave%20matthews 并非在URL中引入core name的参数名值对,而是用不同的context。这样就可以像在单core中执行你的管理任务,搜索,更新操作。 1、找到solr下载包中的example文件夹,在它的下面有个multicore文件夹,将这个文件夹下面的core0、core1和solr.xml拷贝到 c:\solr-tomcat\solr下面。 注意:有一个 solr.xml(这只是默认文件,当然也可以指定别的文件),如: &?xml version="1.0" encoding="UTF-8" ?&
&solr persistent="false"&
&cores adminPath="/admin/cores"&
&core name="core0" instanceDir="core0" /&
&core name="core1" instanceDir="core1" /&
这个文件是告诉solr应该加载哪些core,&cores&……&/cores&里有 core0、core1。core0(可以类比以前的solr.home)/conf目录下有schema.xml与solrconfig.xml,可以把实际应用的复制过来。 2、启动tomcat,访问应用,就可以看到有 Admin core0 和 Admin core1 3、采用上面的默认solr.xml,索引文件将存放在同一个目录下面,在这里将存放在C:\solr-tomcat\solr\data,如果你想更改目录,或者两个应用存放在不同的目录,请参见下面的xml。 &core name="core0" instanceDir="core0"&
&property name="dataDir" value="/data/core0" /& &/core& 一些关键的配置值是: 1.Persistent="false"指明运行时的任何修改我们不做保存。如拷贝。如果你想保存从启动起的一些改动,那就把 persistent设置为true。如果你的index策略是完成建index到一个纯净的core中然后交换到活动core 那么你绝对应该设为true。 sharedLib="lib"指明了所有core的jar文件的lib目录。如果你有一个core有自己需要的jar文件,那么你可以把他们置入到core/lib目录。例如:karaoke core 使用 Solr Cell来索引化富文本内容,因此那些用来解析和抽取富文本的jar文件被放到./examples/cores/karaoke/lib/. 为何使用多core ? Solr实例支持多core比启用多index要好(do more)。多core同时解决了在生产环境下的一些关键需求: 1.重建索引 2.测试配置变更 3.合并索引 4.运行时重命名core 为何多core不是默认的? 多core是1.3版本中才加的,1.4后更成熟。我们强烈建议你使用多core,既是你现在的solr.xml只配置了一个core,虽然会比单个索引稍复杂,但可以带来管理core上的好处。或许一天单个core可能最终RELOAD and STATUS命令,又或许单个core最终会被废禁。多个core会是Solr将来支持大规模分布式索引的关键。因此,以后可以期待更多。 你可以得到更多的关于Solr的资料:http://wiki.apache.org/solr/CoreAdmin. 五、 SOLR搭建企业搜索平台--查询参数说明 在做solr查询的时候,solr提供了很多参数来扩展它自身的强大功能!以下是使用频率最高的一些参数! 1、常用 q - 查询字符串,必须的。查询语句(类似SQL) 相关详细的操作还需lucene 的query 语法 fl - 指定返回那些字段内容,用逗号或空格分隔多个。 start - 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用。 rows - 指定返回结果最多有多少条记录,配合start来实现分页。 sort - 排序,格式:sort=&field name&+&desc|asc&[,&field name&+&desc|asc&]… 。示例:(score desc, price asc)表示先 “score” 降序, 再 “price” 升序,默认是相关性降序。 wt - (writer type)指定输出格式,可以有 xml, json, php, phps, 后面 solr 1.3增加的,要用通知我们,因为默认没有打开。 fl表示索引显示那些field(*表示所有field, score 是solr 的一个匹配热度) q.op 表示q 中 查询语句的 各条件的逻辑操作 AND(与) OR(或) hl 是否高亮 hl.fl 高亮field hl.snippets 不太清楚(反正是设置高亮3就可以了) hl.simple.pre 高亮前面的格式 hl.simple.post 高亮后面的格式 facet 是否启动统计 facet.field
统计field fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如:q=mm&fq=date_time:[ TO ],找关键字mm,并且date_time是091031之间的。官方文档:http://wiki.apache.org/solr/CommonQueryParameters#head-d0e50d2f12ecd6002 2、不常用 q.op - 覆盖schema.xml的defaultOperator(有空格时用"AND"还是用"OR"操作逻辑),一般默认指定 df - 默认的查询字段,一般默认指定 qt - (query type)指定那个类型来处理查询请求,一般不用指定,默认是standard。 3、其它 indent - 返回的结果是否缩进,默认关闭,用 indent=true|on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。 version - 查询语法的版本,建议不使用它,由服务器指定默认值。 六、 SOLR搭建企业搜索平台--Solr查询语法 solr的一些查询语法 1、首先假设我的数据里fields有:name, tel, address 预设的搜寻是name这个字段, 如果要搜寻的数据刚好就是 name 这个字段,就不需要指定搜寻字段名称。 2、查询规则: 如欲查询特定字段(非预设字段),请在查询词前加上该字段名称加 “:” (不包含”号) 符号, 例如: address:北京市海淀区上地软件园 tel:88xxxxx1 1&. q代表query input 2&. version代表solr版本(建议不要变动此变量) 3&. start代表显示结果从哪一笔结果资料开始,预设为0代表第一笔, rows是说要显示几笔数据,预设为10笔 (因为有时查询结果可能有几百笔,但不需要显示所有结果,所以预设是从第一笔开始到第十笔) 所以若要显示第10到30笔就改为: http: //localhost:8080/solr/select/?indent=on&version=2.2&q=address:北京 市海淀区上地软件园+tel:88xxxxx1&version=2.2&start=10&rows= 20&indent=on (indent代表输出的xml要不要缩行.预设为开启 on) 3、另外,要限定输出结果的内容可用 “fl=” 加上你要的字段名称,如以下这个范例: http: //localhost:8080/solr/select/?indent=on&version=2.2&q=text:北京+ OR+text:亿度&start=0&rows=10&fl=name,address,tel 在fl=之后加上了name,adress,tel 所以结果会如下: &result name=”response” numFound=”1340″ start=”0″& &doc& &str name=”name”&北京亿度&/str& &str name=”address”&北京市海淀区上地软件园&/str& &str name=”tel”&88xxxxxx1&/str& &/doc& &doc& &str name=”name”&北京亿度&/str& &str name=”address”/& &str name=”tel”&88xxxxxx1&/str& &/doc& &/result& 4、查询 name 或 address:直接输入查询词, 如: 亿度 送出的内容即为: name:亿度 AND address:海淀 5、若要搜寻联集结果,请在词与词间空格或加上大写 “OR” (不包含”号). 例如: text:海淀 OR text:亿度 text:海淀 OR 亿度
或 海淀 亿度 或 name:亿度 OR tel:88xxxxxx1 或 name:亿度 tel:88xxxxxx1 6、若要搜寻交集结果,请在词与词间加上大写 “AND” 或 “+” (不包含”号). 例如: text:海淀 AND 亿度
或 +text:海淀 +text:亿度 或 name:亿度 AND tel:88xxxxxx1 或 name: ( +亿度 +海淀) 7、排除查询 在要排除的词前加上 “-” (不包含”号) 号 例如: 海淀 -亿度 搜寻结果不会有包含亿度的词的结果在内 8、Group 搜寻 使用 “()” 来包含一个group 如希望搜寻在店名字段内同时有 “台北”(不包含”号) 及 “火车站”(不包含”号) 9、增加权重: 如要搜寻 “北京 加油站”(不包含”号) 但因为回传太多笔资料内有 “中华”(不包含”号) 或 “加油站”(不包含”号) 的结果, 所以想要把有包含 “加油站”(不包含”号)的数据往前排,可使用 “^”(不包含”号)符号在后面加上愈增加的权重数, 像是 “2″,则可以这样做: 北京 加油站^2 会同时搜寻含有北京或加油站的结果,并把加油站这个词加权所以搜寻时会先判断加油站这一个词在搜寻结果中的比重,甚至假设一笔数据内加油站出现过两次以上的就更加会有优先权。 查询时在查询词后加上 “^” (不包含”号) 再加上权重分数 例如: 亿度 AND “北京”^2 或 亿度^2 OR 北京 10、Wildcard 搜寻使用 “*” 符号; 如果输入 “中国*银” (不包含”号), 结果会有中国信托商业银行, 中国输出入银行图书阅览室, 中国商银证券 中国及银之间可夹任何长短字词. 七、 SOLR搭建企业搜索平台--数据库数据导入到Solr 详细请参考地址:http://rq2-/blog/516429 写程序可以将数据读出100条,如果你的内存够大,可以是1000条甚至更多,然后放入Collection中,批量提交至solr。或者读取数据写入xml文件中,再将该文件提交到solr等等。但是,我们还可以通过配置文件直接读取数据库建立索引。 一、提供对应数据库的jdbc驱动。 将jdbc驱动放在TOMCAT_HOME\webapps\solr\WEB-INF\lib目录下。 二、在C:\solr-tomcat\solr\conf目录下新建db文件夹,在db文件夹中新建db-data-config.xml内容如下:
&dataConfig&
&dataSource type="JdbcDataSource" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@192.168.1.1:1521:数据库名" user="用户名" password="密码"/&
&document name="messages"&
&entity name="message" transformer="ClobTransformer" query="select * from tb_message"&
&field column="ID" name="id" /& &field column="TITLE" name="title"/&
&field column="CONTENT" clob="true" name="content" /&
&field column="SENDTIME" name="sendtime" /&
&/document& &/dataConfig& 三、修改C:\solr-tomcat\solr\conf目录下的solrconfig.xml文件。在相应的位置添加如下代码: &!-- DataImportHandler --& &requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"&
&lst name="defaults"&
&str name="config"&C:\solr-tomcat\solr\conf\db\db-data-config.xml&/str&
&/requestHandler& 注:C:\solr-tomcat\solr\conf\db\db-data-config.xml是db-data-config.xml的存放路径,你要根据实际情况而定。 document:一个文档也就是lucene的document这个没什么解释的。 entity:主要针对的是一个数据库表。 filed:属性column是数据库的字段,name是filed的名字,即schema中的field name。 column必须大写 更多请参考官方wiki:http://wiki.apache.org/solr/DataImportHandler 四、启动TOMCAT,输入地址进行导入,导入分为多种模式:我用的是完全导入模式。 http://localhost:8089/solr/dataimport?command=full-import 结果: 00C:\solr-tomcat\solr\conf\db\db-data-config.xmlfull-importidle-05 21:28:08Indexing completed. Added/Updated: 2 documents. Deleted 0 documents. 21:28:-05 21:28:090:0:0.579This response format is experimental. It is likely to change in the future. 五、再去查询你刚才提交的数据。 上面的例子只不过是很简单的一个部分。针对solr的 MultiCore,通过配置db-data-config.xml也可以实现,还有多表,或者多表关联等等操作只要在db-data- config.xml配置清楚都可以进行数据的导入。 在solr1.4中还有更多的扩展功能,这些功能为重建索引提供能很方便的操作。而且,datasource不单单指的是database,可以是xml文件,还可以是来自网络上的等等。 八、 SOLR搭建企业搜索平台—增量更新索引 1、首先要确认表中有last_modified字段。 2、修改C:\solr-tomcat\solr\conf\db\db-data-config.xml文件,内容如下:
&dataConfig&
&dataSource type="JdbcDataSource" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@192.168.1.1:1521:数据库名" user="用户名" password="密码"/&
&document name="messages"&
&entity name="message" pk="ID" transformer="ClobTransformer" query="select * from tb_message" deltaQuery="select id from tb_message where to_char(last_modified,'YYYY-MM-DD HH24:MI:SS') & '${dataimporter.last_index_time}'"&
&field column="ID" name="id" /&
&field column="TITLE" name="title" /&
&field column="CONTENT" clob="true" name="content" /&
&field column="SENDTIME" name="sendtime" /&
&/document& &/dataConfig& 3、重启tomcat。添加一条记录。 访问:http://localhost:8089/solr/dataimport?command=delta-import 再查询一下,是不是可以查询到刚才添加的记录了。 九、 SOLR搭建企业搜索平台--字段增加权重 在很多时候,我们可能会需要增加某一个字段的权重,以合理的显示搜索结果。 例如:有一个schma,有三个字段:chapterId, title, content. 我们希望某一个关键字如果在title中匹配了,就要优先显示,而在content中匹配了,就放在搜索结果的后面。当然,如果两者同时匹配当然没什么好说的了。看看solr中如何做到吧。 title:(test1 test2)^4 content:(test1 test2) 给title字段增加权重,优先匹配 关于^后面的数字4,经过我测试,最佳值应该是有n个字段就写成n+1,当然希望大家能更好的去测试! 十、 SOLR搭建企业搜索平台-- Solr分词器、过滤器、分析器 关于lucene的分析器,分词器,过滤器,请看:http://lianj-/blog/501247
对一个document进行索引时,其中的每个field中的数据都会经历分析(根据上面的一个博客可以知道,分析就是组合分词和过滤),最终将一句话分成单个的单词,去掉句子当中的空白符号,大写转换小写,复数转单数,去掉多余的词,进行同义词代换等等。
如:This is a blog! this, is, a 会被去除,最后最剩下blog。当然!这个符号也会被去除的。
这个过程是在索引和查询过程中都会进行的,而且通常两者进行的处理的都是一样的,这样做是为了保证建立的索引和查询的正确匹配。 分析器(Analyzer)
分析器是包括两个部分:分词器和过滤器。分词器功能将句子分成单个的词元token,过滤器就是对词元进行过滤。
solr自带了一些分词器,如果你需要使用自定义的分词器,那么就需要修改schema.xml文件。
schema.xml 文件允许两种方式修改文本被分析的方式,通常只有field类型为 solr.TextField 的field的内容允许定制分析器。
方法一:使用任何 org.apache.lucene.analysis.Analyzer的子类进行设定。 &fieldType name="text" class="solr.TextField"&
&analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/&
&/fieldType&
方法二:指定一个TokenizerFactory ,后面跟一系列的TokenFilterFactories(它们将按照所列的顺序发生作用),Factories被用来创建分词器和分词过滤器,它们用于对分词器和分词过滤器的准备配置,这样做的目的是为了避免the overhead of creation via reflection。 &analyzer type="index"&
&tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="false"/&
&/analyzer&
&analyzer type="query"&
&tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" isMaxWordLength="true"/&
&/analyzer&
需要说明的一点是,Any Analyzer, TokenizerFactory, or TokenFilterFactory 应该用带包名的全类名进行指定,请确保它们位于Solr的classpath 路径下。对于 org.apache.solr.analysis.* 包下的类,仅仅通过solr.*就可以进行指定。
如果你需要使用自己的分词器和过滤器,你就需要自己写一个 factory ,它必须是 BaseTokenizerFactory(分词器) 或BaseTokenFilterFactory(过滤器)的子类。就像下面一样。 public class MyFilterFactory extends BaseTokenFilterFactory {
public TokenStream create(TokenStream input) {
return new MyFilter(input);
} } 对于IK3.1.5版本已经完全支持了solr的分词,这样就不用自己来编写了, 而对于中文的切词的话,ik对solr的支持已经很完美了。 Solr提供了哪些TokenizerFactories? 1.
solr.LetterTokenizerFactory
创建org.apache.lucene.analysis.LetterTokenizer.
分词举例:
"I can't" ==& "I", "can", "t",字母切词。 2.
solr.WhitespaceTokenizerFactory
创建org.apache.lucene.analysis.WhitespaceTokenizer,主要是切除所有空白字符。 3.
solr.LowerCaseTokenizerFactory
创建org.apache.lucene.analysis.LowerCaseTokenizer
分词举例:
"I can't" ==& "i", "can", "t",主要是大写转小写。 4.
solr.StandardTokenizerFactory
创建org.apache.lucene.analysis.standard.StandardTokenizer
分词举例:
"I.B.M. cat's can't" ==& ACRONYM: "I.B.M.", APOSTROPHE:"cat's", APOSTROPHE:"can't"
说明:该分词器,会自动地给每个分词添加type,以便接下来的对type敏感的过滤器进行处理,目前仅仅只有StandardFilter对Token 的类型是敏感的。 5.
solr.HTMLStripWhitespaceTokenizerFactory 从结果中除去HTML标签,将结果交给WhitespaceTokenizer处理。 例子: my &a href="www.foo.bar"&link&/a& my link &?xml?&&br&hello&!--comment--& hello hello&script&&-- f('&--internal--&&/script&'); --&&/script& hello if a& if a& hello &td height=22 nowrap align="left"& hello a&b &#65 Alpha&Omega &O a&b A Alpha&Omega Ω 6.
solr.HTMLStripStandardTokenizerFactory 从结果中出去HTML标签,将结果交给StandardTokenizer处理。 7.
solr.PatternTokenizerFactory 说明:按照规则表达式样式对分本进行分词。 例子:处理对象为, dogs,他们由分号加上一个或多个的空格分隔。 &fieldType name="semicolonDelimited" class="solr.TextField"&
&analyzer&
&tokenizer class="solr.PatternTokenizerFactory" pattern="; *" /&
&/analyzer& &/fieldType& Solr有哪些TokenFilterFactories? 1.
solr.StandardFilterFactory 创建:org.apache.lucene.analysis.standard.StandardFilter. 移除首字母简写中的点和Token后面的’s。仅仅作用于有类的Token,他们是由StandardTokenizer产生的。 例:StandardTokenizer+ StandardFilter "I.B.M. cat's can't" ==& "IBM", "cat", "can't" 2.
solr.LowerCaseFilterFactory 创建:org.apache.lucene.analysis.LowerCaseFilter. 3.
solr.TrimFilterFactory【solr1.2】 创建:org.apache.solr.analysis.TrimFilter 去掉Token两端的空白符 例: " Kittens!
", "Duck" ==& "Kittens!", "Duck". 4.
solr.StopFilterFactory 创建:org.apache.lucene.analysis.StopFilter 去掉如下的通用词,多为虚词。
"a", "an", "and", "are", "as", "at", "be", "but", "by",
"for", "if", "in", "into", "is", "it",
"no", "not", "of", "on", "or", "s", "such",
"t", "that", "the", "their", "then", "there", "these",
"they", "this", "to", "was", "will", "with" 自定义的通用词表的使用可以通过schema.xml文件中的"words"属性来指定,如下。 &fieldtype name="teststop" class="solr.TextField"&
&analyzer&
&tokenizer class="solr.LowerCaseTokenizerFactory"/&
&filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/&
&/analyzer& &/fieldtype& 5.
solr.KeepWordFilterFactory【solr1.3】 创建:org.apache.solr.analysis.KeepWordFilter 作用与solr.StopFilterFactory相反,保留词的列表也可以通过”word”属性进行指定。 &fieldtype name="testkeep" class="solr.TextField"&
&analyzer&
&filter class="solr.KeepWordFilterFactory" words="keepwords.txt" ignoreCase="true"/&
&/analyzer& &/fieldtype& 6. solr.LengthFilterFactory 创建:solr.LengthFilter 过滤掉长度在某个范围之外的词。范围设定方式见下面。 &fieldtype name="lengthfilt" class="solr.TextField"&
&analyzer&
&tokenizer class="solr.WhitespaceTokenizerFactory"/&
&filter class="solr.LengthFilterFactory" min="2" max="5" /&
&/analyzer& &/fieldtype& 7.
solr.PorterStemFilterFactory 创建:org.apache.lucene.analysis.PorterStemFilter 采用Porter Stemming Algorithm算法去掉单词的后缀,例如将复数形式变成单数形式,第三人称动词变成第一人称,现在分词变成一般现在时的动词。 8.
solr.EnglishPorterFilterFactory 创建:solr.EnglishPorterFilter 关于句子主干的处理,其中的"protected"指定不允许修改的词的文件。 9.
solr.SnowballPorterFilterFactory 关于不同语言的词干处理 10.solr.WordDelimiterFilterFactory 关于分隔符的处理。 11.solr.SynonymFilterFactory 关于同义词的处理。 12.solr.RemoveDuplicatesTokenFilterFactory 避免重复处理。 十一、 SOLR搭建企业搜索平台-- Solr高亮使用 1、SolrQuery类,此类有方法setHighlight(true),当设置为true时,表示开启了高亮。 2、SolrQuery类,有方法:
// 以下给两个字段开启了高亮,分别是name,description,
query.addHighlightField("name");
query.addHighlightField("description");
// 以下两个方法主要是在高亮的关键字前后加上html代码
query.setHighlightSimplePre("&font color=\"red\"&");
query.setHighlightSimplePost("&/font&"); 3、下面是获取高亮的内容: Map&String,Map&String,List&String&&& map = response.getHighlighting(); Map的Key为document的Id,即你在schema.xml中设置的Id,Value为该Id对应的document的值,Value也为一个Map,该Map的Key为fieldName,Value为List&String&,这个List里面的内容就是该文档的高亮字段。 所以当做逻辑处理的时候,只要按照这个层次,依次把东西给取出来即可,如果取出来的东西为空,则用QueryResponse中的 SolrDocument的getFieldValue(filedName)的值。 对了,请注意在solrConfig.xml中开启高亮组件,这个可以看看官方wiki或者看solrconfig.xml中注释! 十二、 SOLR搭建企业搜索平台-- Solr的检索运算符 1. “:” 指定字段查指定值,如返回所有值*:* 2. “?” 表示单个任意字符的通配 3. “*” 表示多个任意字符的通配(不能在检索的项开始使用*或者?符号) 4. “~” 表示模糊检索,如检索拼写类似于”roam”的项这样写:roam~将找到形如foam和roams的单词;roam~0.8,检索返回相似度在0.8以上的记录。 5. 邻近检索,如检索相隔10个单词的”apache”和”jakarta”,”jakarta apache”~10 6. “^” 控制相关度检索,如检索jakarta apache,同时希望去让”jakarta”的相关度更加好,那么在其后加上”^”符号和增量值,即jakarta^4 apache 7. 布尔操作符AND、|| 8. 布尔操作符OR、&& 9. 布尔操作符NOT、!、- (排除操作符不能单独与项使用构成查询) 10.“+” 存在操作符,要求符号”+”后的项必须在文档相应的域中存在 11. ( ) 用于构成子查询 12. [] 包含范围检索,如检索某时间段记录,包含头尾,date:[200707 TO 200710] 13. {} 不包含范围检索,如检索某时间段记录,不包含头尾 date:{200707 TO 200710} 14. \ 转义操作符,特殊字符包括+ - && || ! ( ) { } [ ] ^ ” ~ * ? : \ 补: 庖丁分词器 1. &fieldType name="text" class="solr.TextField"&
&analyzer class="net.paoding.analysis.analyzer.PaodingAnalyzer"&&/analyzer&
3. &/fieldType&
4. 注意:不能有 positionIncrementGap 属性。 paoding-dic-home.properties文件的配置如下: #values are "system-env" or "this"; #if value is "this" , using the paoding.dic.home as dicHome if configed! #paoding.dic.home.config-fisrt=system-env #dictionary home (directory) #"classpath:xxx" means dictionary home is in classpath. #e.g "classpath:dic" means dictionaries are in "classes/dic" directory or any other classpath directory #paoding.dic.home=dic #seconds for dic modification detection #paoding.dic.detector.interval=60 paoding.dic.home=C://solr-tomcat//solr//dic 设置环境变量 paoding.dic.home 然后在schema.xml中配置FILED的类型是上面定义的Text。
浏览: 136756 次
额,貌似是跟65536相减
请教一下,py1数组元素中的数字是如何算出来的?
var py ...
哦,明白了,但是我运行的时候一直报错啊http status
首先非常感谢你的分享,我想问一下你那个表中actionName ...
I have setup a test liferay env ...}

我要回帖

更多关于 solrcloud 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信