Solr开发环境及配置及使用大全
window7 Tomcat7+Solr 4.7.0环境搭建:
http://blog.csdn.net/u010519674/article/details/28889157
http://blog.csdn.net/zhangliao613/article/details/46608343
http://m.blog.csdn.net/article/details?id=50817911
Solr开发环境及配置大全
1.Solr-4.7.0环境搭建
1、下载solr-4.7.0.zip;
2、解压缩solr-4.7.0.zip;,解压后目录结构如下:
3.建Solr工作目录,如:d:\solr
4.将 solr-4.7.0目录下的 example下的solr拷贝到我们上面创建的Solr工作目录:d:\solr
5、将 solr-4.7.0\dist下的solr-4.7.0.war文件复制到上面下载的apache-tomcat-7.0.69的
webapps下,并将该war包改成solr.war.(C:\Program Files (x86)\apache-tomcat-7.0.69\webapps)
6、启动tomcat服务器,这时候会报错,暂时不用管,只是为了解压war包,启动完成后关闭Tomcat;
7、删除solr.war文件。(不然每次启动tomcat都会发布一次)
8、打开文件夹:solr-4.7.0\example\lib\ext,复制所有jar包到tomcat的webapps\solr\WEB-INF\lib下
9、添加日志文件, 将solr-4.7.0\example\resources下logging.properties文件 拷贝到tomcat\conf目录下
10、修改tomcat目录下webapps\solr\WEB-INF\web.xml,添加如下内容:
- <env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value> d:\solr </env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
11、运行web:http://localhost:8080/solr,将看到如下画面:
2.Solr-4.7.0 Mysql数据库导入数据
solr4 mysql数据库导入数据:
http://blog.csdn.net/hbuxzy/article/details/9254071
data-config.xml(D:\solr\collection1\conf\data-config.xml)配置说明:
deltaQuery的意思是,查询出所有经过修改的记录的ID
注意:日期比较>使用>
schema.xml(D:\solr\collection1\conf\schema.xml)配置说明:
<field name="site_id" type="int" indexed="true" stored="true" />
<field name="title" type="text_ik" indexed="true" stored="true" multiValued="false"/>
<field name="clicks" type="int" indexed="true" stored="true" />
<field name="publish_date" type="tdate" indexed="true" stored="true" />
<field name="disabled" type="int" indexed="true" stored="true" />
<field name="content" type="text_ik" indexed="true" stored="true" multiValued="false"/>
<field name="ik" type="text_ik" indexed="true" stored="true" multiValued="true"/>
1、D:\solr\collection1\conf\solrconfig.xml中增加:
- <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
- <lst name="defaults">
- <str name="config">data-config.xml</str>
- </lst>
- </requestHandler>
2、新增文件D:\solr\collection1\conf \data-config.xml,内容为数据库的连接信息:
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="base" type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://数据库:端口/cms?autoReconnect=true&useUnicode=true&characterEncoding=utf8"
user="lakala"
password="lakala"/>
<document>
<entity pk="id" dataSource="base" name="cms_content" transformer="HTMLStripTransformer"
query="select a.id,a.site_id,a.title,a.author,a.url,a.clicks,a.publish_date,convert(a.disabled,SIGNED) as disabled,b.text as content from 表名 a left join 表名 b on b.content_id = a.id where a.status=1 and a.disabled=0 and a.type in(0,1)"
deltaQuery="select id from 表名 where publish_date > '${dih.last_index_time}'"
deletedPkQuery="select id from 表名 where status=1 and disabled=1 and type in(0,1)"
deltaImportQuery="select a.id,a.site_id,a.title,a.author,a.url,a.clicks,a.publish_date,convert(a.disabled,SIGNED) as disabled,b.text as content from 表名 a left join 表名 b on b.content_id = a.id where a.id='${dih.delta.id}'">
<field column="id" name="id"/>
<field column="site_id" name="site_id"/>
<field column="title" name="title"/>
<field column="author" name="author"/>
<field column="url" name="url"/>
<field column="clicks" name="clicks"/>
<field column="publish_date" name="publish_date"/>
<field column="disabled" name="disabled"/>
<!--查询字段名,配置字段名,是否使用格式化-->
<field column="content" name="content" stripHTML="true"/>
</entity>
</document>
</dataConfig>
3、D:\solr\collection1\conf\schema.xml文件中增加相应field配置,title 和 content 在schema.xml里面都有了,那就不用动了暂时。
- <copyField source="title" dest="text"/>
- <copyField source="content" dest="text"/>
4、将mysql的驱动文件mysql-connector-java-5.1.20-bin.jar添加到solr的war包中(webapps\solr\WEB-INF\lib)
solr-dataimporthandler-4.7.0.jar,solr-dataimporthandler-extras-4.7.0.jar
加入到 (webapps\solr\WEB-INF\lib) 中。
5、重启服务,在浏览器中输入:
http://localhost:8080/solr/#/collection1/dataimport//dataimport ,进入下面界面,进行导入:
6.导入后,进入查询页面,用title 查询,看是否能查询到数据库中的数据,我的数据库中有两条,所以此处也查到了两条:
3.Solr-4.7.0中文分词器(ik-analyzer)配置
solr4.7中文分词器(ik-analyzer)配置:
http://blog.csdn.net/xiaoyu411502/article/details/44810497
solr本身对中文分词的处理不是太好,所以中文应用很多时候都需要额外加一个中文分词器对中文进行分词处理,ik-analyzer就是其中一个不错的中文分词器。
solr版本:4.7.0
需要ik-analyzer版本:IK Analyzer 2012FF_hf1
ik-analyzer下载地址:http://code.google.com/p/ik-analyzer/downloads/list
1、下载压缩解压后得到如下目录结构的文件夹:
2、把IKAnalyzer2012FF_u1.jar拷贝到solr服务的webapps\solr\WEB-INF\lib下面
3、在webapps\solr\WEB-INF下面新建classes文件夹,把IKAnalyzer.cfg.xml、stopword.dic拷贝到classes下面。
4、修改D:\solr\collection1\conf的schema.xml,在<types></types>配置项间加一段如下配置:
5、在这个core的schema.xml里面配置field类型的时候就可以使用text_ik了
- <field name="name" type="text_ik" indexed="true" stored="true" multiValued="false" />
6、中文分词测试
4.Solr-4.7.0定时全量索引、增量索引
solr定时实时重建索引和增量更新:
http://blog.csdn.net/zwx19921215/article/details/43152307
Solr学习(四)DIH全量导入并索引数据:
http://www.aboutyun.com/thread-10496-1-1.html
solr 定时全量索引 增量索引与dataimporter.properties 配置:
http://blog.csdn.net/a__java___a/article/details/22688243
参考:官方文档:
http://wiki.apache.org/solr/DataImportHandler#Scheduling
apache-solr-dataimportscheduler-1.0.jar下载地址:
http://solr-dataimport-scheduler.googlecode.com/files/apache-solr-dataimportscheduler-1.0.jar
数据库配置注意事项
1、如果只涉及添加,与修改业务,那么数据库里只需额外有一个timpstamp字段就可以了,默认值为当前系统时间,CURRENT_TIMESTAMP(笔者的数据为mysql的)
2、如果还涉及删除业务,那么数据里就需额外再多添加一个字段isdelete,int类型的用0,1来标识,此条记录是否被删除,当然也可以用其他字段标识,ture或false都可以。
data-config.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="base" type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://IP:端口/cms?autoReconnect=true&useUnicode=true&characterEncoding=utf8"
user="lakala"
password="lakala"/>
<document>
<entity pk="id" dataSource="base2" name="cms2" transformer="HTMLStripTransformer"
query="select a.id,a.site_id,a.title,a.author,a.url,a.clicks,a.publish_date,convert(a.disabled,SIGNED) as disabled,b.text as content from 表名 a left join 表名 b on b.content_id = a.id where a.status=1 and a.disabled=0 and a.type in(0,1)"
deltaQuery="select id from 表名 where publish_date > '${dih.last_index_time}'"
deletedPkQuery="select id from 表名 where status=1 and disabled=1 and type in(0,1)"
deltaImportQuery="select a.id,a.site_id,a.title,a.author,a.url,a.clicks,a.publish_date,convert(a.disabled,SIGNED) as disabled,b.text as content from 表名 a left join 表名 b on b.content_id = a.id where a.id='${dih.delta.id}'">
<field column="id" name="id"/>
<field column="site_id" name="site_id"/>
<field column="title" name="title"/>
<field column="author" name="author"/>
<field column="url" name="url"/>
<field column="clicks" name="clicks"/>
<field column="publish_date" name="publish_date"/>
<field column="disabled" name="disabled"/>
<!--查询字段名,配置字段名,是否使用格式化-->
<field column="content" name="content" stripHTML="true"/>
</entity>
</document>
</dataConfig>
1、在进行增量索引前,首先要弄懂几个必要的属性,以及数据库建表事项,和dataimporter.properties
data-config.xml里面的数据
<!-- transformer 格式转化:HTMLStripTransformer 索引中忽略HTML标签 --->
<!-- query:查询数据库表符合记录数据 --->
<!-- deltaQuery:增量索引查询主键ID ---> 注意这个只能返回ID字段
<!-- deltaImportQuery:增量索引查询导入数据 --->
<!-- deletedPkQuery:增量索引删除主键ID查询 ---> 注意这个只能返回ID字段
2、 将 solr-dataimportscheduler-1.1.jar 和solr自带的 solr-dataimporthandler-4.7.0.jar, solr-dataimporthandler-extras-4.7.0.jar 放到webapps\solr\WEB-INF的lib目录下面
3、修改solr.war中WEB-INF/web.xml, 在servlet节点前面增加:
- <listener>
- <listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>
- </listener>
3、新建配置文件dataimport.properties:
在d:\solr目录下面新建一个目录conf(注意不是d:\solr\collection1下面的conf),然后用解压文件打开apache-solr-dataimportscheduler-1.0.jar文件,将里面的dataimport.properties文件拷贝过来,进行修改。
4、重启tomcat 即可
5、修改dataimport.properties内容:
- #################################################
- # #
- # dataimport scheduler properties #
- # #
- #################################################
- # to sync or not to sync
- # 1 - active; anything else - inactive
- syncEnabled=1
- # which cores to schedule
- # in a multi-core environment you can decide which cores you want syncronized
- # leave empty or comment it out if using single-core deployment
- #syncCores=game,resource
- syncCores=collection1
- # solr server name or IP address
- # [defaults to localhost if empty]
- server=localhost
- # solr server port
- # [defaults to 80 if empty]
- port=8080
- # application name/context
- # [defaults to current ServletContextListener's context (app) name]
- webapp=solr
- # URL params [mandatory]
- # remainder of URL
- params=/dataimport?command=delta-import&clean=false&commit=true
- # schedule interval
- # number of minutes between two runs
- # [defaults to 30 if empty]
- interval=1
- # 重做索引的时间间隔,单位分钟,默认7200,即1天;
- # 为空,为0,或者注释掉:表示永不重做索引
- reBuildIndexInterval=2
- # 重做索引的参数
- reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true
- # 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
- # 两种格式:2012-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期
- reBuildIndexBeginTime=03:10:00
一般来说要在你的项目中引入Solr需要考虑以下几点:
1、数据更新频率:每天数据增量有多大,随时更新还是定时更新
2、数据总量:数据要保存多长时间
3、一致性要求:期望多长时间内看到更新的数据,最长允许多长时间延迟
4、数据特点:数据源包括哪些,平均单条记录大小
5、业务特点:有哪些排序要求,检索条件
6、资源复用:已有的硬件配置是怎样的,是否有升级计划
5.Solr-4.7.0高亮配置说明
Solr高亮的配置参数说明:
http://www.cnblogs.com/Laupaul/archive/2012/04/24/2467388.html
- hl-highlight,h1=true,表示采用高亮。可以用h1.fl=field1,field2 来设定高亮显示的字段。
- hl.fl:用空格或逗号隔开的字段列表。要启用某个字段的highlight功能,就得保证该字段在schema中是stored。如果该参数未被给出,那么就会高 亮默认字段 standard handler会用df参数,dismax字段用qf参数。你可以使用星号去方便的高亮所有字段。如果你使用了通配符,那么要考虑启用 。
- hl.requireFieldMatch:如果置为true,除非该字段的查询结果不为空才会被高亮。它的默认值是false,意味 着它可能匹配某个字段却高亮一个不同的字段。如果hl.fl使用了通配符,那么就要启用该参数。尽管如此,如果你的查询是all字段(可能是使用 copy-field 指令),那么还是把它设为false,这样搜索结果能表明哪个字段的查询文本未被找到
- hl.usePhraseHighlighter:如果一个查询中含有短语(引号框起来的)那么会保证一定要完全匹配短语的才会被高亮。
- hl.highlightMultiTerm 如果使用通配符和模糊搜索,那么会确保与通配符匹配的term会高亮。默认为false,同时hl.usePhraseHighlighter要为true。
- hl.snippets: 这是highlighted片段的最大数。默认值为1,也几乎不会修改。如果某个特定的字段的该值被置为0(如f.allText.hl.snippets=0),这就表明该字段被禁用高亮了。你可能在hl.fl=*时会这么用。
- hl.fragsize: 每个snippet返回的最大字符数。默认是100.如果为0,那么该字段不会被fragmented且整个字段的值会被返回。大字段时不会这么做。
- hl.mergeContiguous: 如果被置为true,当snippet重叠时会merge起来。
- hl.maxAnalyzedChars: 会搜索高亮的最大字符,默认值为51200,如果你想禁用,设为-1
- hl.alternateField: 如果没有生成snippet(没有terms 匹配),那么使用另一个字段值作为返回。
- hl.maxAlternateFieldLength: 如果hl.alternateField启用,则有时需要制定alternateField的最大字符长度,默认0是即没有限制。所以合理的值是应该为hl.snippets * hl.fragsize这样返回结果的大小就能保持一致。
- hl.formatter:一个提供可替换的formatting算法的扩展点。默认值是simple,这是目前仅有的选项。显然这不够用,你可以看看org.apache.solr.highlight.HtmlFormatter.java 和 solrconfig.xml 中highlighting元素是如何配置的。 注意在不论原文中被高亮了什么值的情况下,如预先已存在的em tags,也不会被转义,所以在有时会导致假的高亮。 -hl.fragmenter:这个是solr制定fragment算法的扩展点。gap是默认值。regex是另一种选项,这种选项指明highlight的边界由一个正则表达式确定。这是一种非典型 的高级选项。为了知道默认设置和fragmenters (and formatters)是如何配置的,可以看看 solrconfig.xml 中的highlight段。
- hl.regex.pattern:正则表达式的pattern
- hl.regex.slop:这是hl.fragsize能变化以适应正则表达式的因子。默认值是0.6,意思是如果 hlfragsize=100 那么fragment的大小会从40-160.
6.Solr-4.7.0查询语法
Apache Solr查询语法:
http://blog.csdn.net/xiaoyu411502/article/details/45576977
- 常用
- q - 查询字符串,必须的。
- fl - 指定返回那些字段内容,用逗号或空格分隔多个。
- start - 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用。
- rows - 指定返回结果最多有多少条记录,配合start来实现分页。
- sort - 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]。示例:(inStock desc, price asc)表示先 "inStock" 降序, 再 "price" 升序,默认是相关性降序。
- wt - (writer type)指定输出格式,可以有 xml, json, php, phps。
- fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如:q=mm&fq=date_time:[20081001 TO 20091031],找关键字mm,并且date_time是20081001到20091031之间的
- 不常用
- defType:
- q.op - 覆盖schema.xml的defaultOperator(有空格时用"AND"还是用"OR"操作逻辑),一般默认指定
- df - 默认的查询字段,一般默认指定
- qt - (query type)指定那个类型来处理查询请求,一般不用指定,默认是standard。
- 其他
- indent - 返回的结果是否缩进,默认关闭,用 indent=true|on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。
- version- 查询语法的版本,建议不使用它,由服务器指定默认值。