solr配置

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">&lt;font color=&quot;red&quot;&gt;</str>
    <!--设置高亮显示的后半部分-->  
    <str name="hl.simple.post">&lt;/font&gt;</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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值