Solr4.7.2配合JDK1.6开发配置
第一步
解压solr-4.7.2的安装包 在solr-4.7.2\example\solr目录下
copy一份collection1目录重命名为bjsjzz-bzdz
然后在bjsjzz-bzdz目录下找到conf目录
打开solr-4.7.2\example\solr\bjsjzz-bzdz\conf\schema.xml文件
文件名:schema.xml
添加如下代码
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="sjly" type="int" indexed="true" stored="true" omitNorms="true" />
<field name="sfyx" type="int" indexed="true" stored="true" omitNorms="true" />
<field name="update_time" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="create_time" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="jlxmc" type="text_general" indexed="true" stored="true" omitNorms="true" />
<field name="lph" type="text_general" indexed="true" stored="true" omitNorms="true" />
<field name="fjh" type="text_general" indexed="true" stored="true" omitNorms="true" />
<field name="dzbm" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="huid" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="dybm" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="hubm" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="dys" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="cs" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="hs" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="sftjdys" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="jzmc" type="text_general" indexed="true" stored="true" omitNorms="true" />
<field name="jlxdm" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="sqdm" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="sqmc" type="text_general" indexed="true" stored="true" omitNorms="true" />
<field name="pcsdm" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="pcsmc" type="text_general" indexed="true" stored="true" omitNorms="true" />
<field name="fjmc" type="text_general" indexed="true" stored="true" omitNorms="true" />
<field name="fjdm" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="bzdz" type="text_general" indexed="true" stored="true" omitNorms="true" />
<field name="jlxmcpy" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="lphpy" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="fjhpy" type="string" indexed="true" stored="true" omitNorms="true" />
<field name="content" type="text_general" indexed="true" stored="false" multiValued="true"/>
<!--把多个字段放到一个域中便于搜索,但是配置文件终不能有中文信息,在部署时需要删除中文注释-->
<copyField source="jlxmc" dest="content" />
<copyField source="lph" dest="content" />
<copyField source="fjh" dest="content" />
<copyField source="jzmc" dest="content" />
<copyField source="sqmc" dest="content" />
<copyField source="pcsmc" dest="content" />
<copyField source="fjmc" dest="content" />
第二步
从solr-4.7.2\example\example-DIH\solr\solr\conf目录下的
solr-data-config.xml,solrconfig.xml文件
复制到 solr-4.7.2\example\solr\bjsjzz-bzdz\conf\目录下
配置文件
solr-data-config.xml
内容如下:
<dataConfig>
<dataSource name="solrDB"
type="JdbcDataSource" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@130.10.7.223:1521:orcl" user="bjsjzz" password="bjsjzz" />
<document>
<entity dataSource="solrDB" name="bjsjzz-bzdz"
query="select * from JZZ_JZZDZXXB"
deltaImportQuery="select * from JZZ_JZZDZXXB where id='${dih.delta.id}'"
deltaQuery="SELECT id from JZZ_JZZDZXXB where Update_Time > to_char(to_date('${dataimporter.last_index_time}','yyyy-mm-dd hh24:mi:ss'),'yyyymmddhh24miss')"
>
<field column="id" name="id"/>
<field column="sjly" name="sjly"/>
<field column="sfyx" name="sfyx"/>
<field column="update_time" name="update_time"/>
<field column="create_time" name="create_time"/>
<field column="jlxmc" name="jlxmc"/>
<field column="lph" name="lph"/>
<field column="fjh" name="fjh"/>
<field column="dzbm" name="dzbm"/>
<field column="huid" name="huid"/>
<field column="dybm" name="dybm"/>
<field column="hubm" name="hubm"/>
<field column="dys" name="dys"/>
<field column="cs" name="cs"/>
<field column="hs" name="hs"/>
<field column="sftjdys" name="sftjdys"/>
<field column="jzmc" name="jzmc"/>
<field column="jlxdm" name="jlxdm"/>
<field column="sqdm" name="sqdm"/>
<field column="sqmc" name="sqmc"/>
<field column="pcsdm" name="pcsdm"/>
<field column="pcsmc" name="pcsmc"/>
<field column="fjmc" name="fjmc"/>
<field column="fjdm" name="fjdm"/>
<field column="bzdz" name="bzdz"/>
<field column="jlxmcpy" name="jlxmcpy"/>
<field column="lphpy" name="lphpy"/>
<field column="fjhpy" name="fjhpy"/>
</entity>
</document>
</dataConfig>
第三步
添加需要的jar包
ojdbc14.jar #oracle导入数据需要的包
solr-dataimporthandler-4.7.2.jar #数据自动导入需要的jar包
第四步
启动solr
配置solr查询信息
<str name="df">text</str>
<!--是否高亮显示-->
<str name="hl">true</str>
<!--高亮显示字段-->
<str name="hl.fl">bzdz</str>
<!--每次返回条数-->
<int name="rows">10</int>
<!--指定返回的列-->
<str name="fl">bzdz,id</str>
<str name="f.name.hl.fragsize">50</str>
<!--设置高亮显示的样式的前半部分-->
<str name="hl.simple.pre"><font color="red"></str>
<!--设置高亮显示的后半部分-->
<str name="hl.simple.post"></font></str>
第五步
添加自定义拼音分词器
<fieldType name="text_pinyin" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
<!--自定义拼音分词器-->
<filter class="org.apache.lucene.analysis.pinyin.solr4.PinyinTokenFilterFactory" shortPinyin="true" firstChar="false" minTermLenght="2" />
<!-- 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="org.apache.lucene.analysis.pinyin.solr4.PinyinNGramTokenFilterFactory" nGramChinese="false" nGramNumber="false"/>-->
</analyzer>
<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
<filter class="org.apache.lucene.analysis.pinyin.solr4.PinyinTokenFilterFactory" outChinese="true" shortPinyin="true" firstChar="false" minTermLenght="2" />
<!-- 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="org.apache.lucene.analysis.pinyin.solr4.PinyinNGramTokenFilterFactory" nGramChinese="true" nGramNumber="true"/>-->
</analyzer>
</fieldType>
配置拼音检索依赖的jar包
analyzer-pinyin-lucene-4.7.2.jar #自定义的可用于lucene
analyzer-pinyin-solr-4.7.2.jar #自定义可用于solr,依赖luncene包
IKAnalyzer2012_FF.jar #开源的
solr-analyzer-ik-4.7.2.jar # 自定义工厂类 配置文件中配置的
TOMCAT 部署Solr4.7.2服务器
解压solr4.7.2安装包
去复制解压包目录下的这个文件到tomcat的webapp目录下
D:\solr\solr-4.7.2\example\webapps\solr.war
启动tomcat,solr.war会自解压为一个web可执行程序
然后copy这个目录下的所有lib到tomcat,webapp目录下的lib目录中
D:\solr\solr-4.7.2\example\lib\ext
jcl-over-slf4j-1.6.6.jar
jul-to-slf4j-1.6.6.jar
log4j-1.2.16.jar
slf4j-api-1.6.6.jar
slf4j-log4j12-1.6.6.jar
copy D:\solr\solr-4.7.2\example\resources 目录下的
log4j.properties
到
4.7.2\solr4.7.2webapp\WEB-INF目录下
然后修改WEB-INF下的web.xml配置文件如下图
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<!--生成索引存放的位置 中文注释,记得在生产环境中去掉-->
<env-entry-value>D:/solr/solr-4.7.2/example/solr/</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
然后可以启动tomcat试试
http://130.10.9.77:8130/solr/
1、常用查询参数说明
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, 后面 solr 1.3增加的,要用通知我们,因为默认没有打开。
fq - (filter query)过虑查询,作用:在q查询符合结果中同时是fq查询符合的,例如:q=mm&fq=date_time:[20081001 TO 20091031],找关键字mm,并且date_time是20081001到20091031之间的。官方文档:http://wiki.apache.org/solr/CommonQueryParameters
不常用
q.op - 覆盖schema.xml的defaultOperator(有空格时用"AND"还是用"OR"操作逻辑),一般默认指定 “OR”
df - 默认的查询字段,一般默认指定
qt - (query type)指定那个类型来处理查询请求,一般不用指定,默认是standard。
其它
indent - 返回的结果是否缩进,默认关闭,用 indent=true|on 开启,一般调试json,php,phps,ruby输出才有必要用这个参数。
version - 查询语法的版本,建议不使用它,由服务器指定默认值。
solrconfig.xml的配置实例
查询配置(以上参数项都可以配置到该配置文件)
explicit
10
<str name="defType">edismax</str> //使用的是solr 扩展的查询解析器
<str name="q.alt">*:*</str>
<str name="fq">sell_price:[1 TO *]</str>
<str name="hl">true</str>
<str name="hl.fl">room_name</str>
<str name="bf">sum(product(termfreq(room_status,"dzz"),1.2),1)</str> //额外的评分字段,这个是可以影响score的打分的
<str name="pf"> //要查询的字段
room_name house_code room_code zr_house_code hire_commissioner_name broker_name rating_address resblock_name district_name subway_station_name subway_line_name
</str>
<str name="qf"> //各自段分配的权重
room_name^5 house_code room_code zr_house_code hire_commissioner_name broker_name rating_address resblock_name^2 district_name subway_station_name subway_line_name
</str>
</lst>
另外schema.xml的defaultOperator参数是个很重要的参数,默认是“OR”,意思是要查询的关键词做完分词后的词做 “OR”连接,然后再做查询,而“AND”呢,要至少全包含要搜索的关键词才行。
2、查询语法
solr的一些查询语法
1.1. 首先假设我的数据里fields有:name, tel, address 预设的搜寻是name这个字段, 如果要搜寻的数据刚好就是 name 这个字段,就不需要指定搜寻字段名称.
1.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)
1.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
所以结果会如下:
3、查询参数
常用
q - 查询字符串,必须的。
fl - 指定返回那些字段内容,用逗号或空格分隔多个。
start - 返回第一条记录在完整找到结果中的偏移位置,0开始,一般分页用。
rows - 指定返回结果最多有多少条记录,配合start来实现分页。
sort - 排序,格式:sort=+
4.高亮
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.
这里是封装的solr4.7.2 IK分词器
欢迎联系 QQ:15236208138