上一步 () , 已经配置好了 Solr3.5 和 mmseg4j 分词 , 接下来配置 Solr3.5 的 suggest 来实现 autocomplete(搜索自动提示补全功能)
输入提示 , 分为两种 : 单词提示 , 短语提示
单词提示 , 使用的 字段类型 , 分析过滤配置如下 :
<fieldType class="solr.TextField" name="text_auto" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
短语提示 , 使用的 字段类型 , 分析过滤配置如下 :
<fieldType class="solr.TextField" name="text_auto">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
我这里用的是 短语提示 , 把上面的配置文件 , 拷贝到 schema.xml 文件的 types 节点里 。
然后在 schema.xml 文件的 fields 节点里 , 新建一个索引字段 , 使用上面的 短语提示[ text_auto ]
<field name="text_autocomplete" type="text_auto" indexed="true" stored="true" multiValued="true" />
如果我们需要对一个 "关键词" 同时查询多个列 , 那么我们可以使用 CopyField 进行列的合并 , 如下 :
<copyField source="text" dest="text_autocomplete" maxChars="300" />
source 是要拷贝的字段 , dest 是要合并到的字段 , maxChars 是字数限制
更多关于 schema.xml 里的配置信息 , 请查阅 http://wiki.apache.org/solr/SchemaXml
接下来 , 添加 suggest 的查询接口 , 在 solrconfig.xml 文件里 , 添加如下
<searchComponent name="suggest" class="solr.SpellCheckComponent">
<lst name="spellchecker">
<str name="name">suggest</str>
<str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
<str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
<str name="field">text_autocomplete</str>
</lst>
</searchComponent>
<requestHandler name="/suggest" class="org.apache.solr.handler.component.SearchHandler">
<lst name="defaults">
<str name="spellcheck">true</str>
<str name="spellcheck.dictionary">suggest</str>
<str name="spellcheck.count">10</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
</requestHandler>
searchComponent 是一个 拼写检查的组件 , 里面定义的属性信息包括 :
name 当前组件的名称
classname 拼写检查使用的类名
lookupImpl 绑定这个搜索的对象,目前有两个类可以使用-JasperLookup、TSTLookup,第二个效率更高
field 是 schema.xml 里的字段名
requestHandler 是查询接口 , 在 url 里访问使用的 。
到这里 , 我们的suggest配置已经完成了, 接下来重启 Apache , 刚配置好事查不出任何数据的 , 已经创建好的索引里没有刚配置的索引 , 这时候需要重新生成索引文件 , 把新配置的索引给生成数据 , 我的索引是 连接的 mysql 数据库创建的 , 那么我需要重新导入一下数据 , 访问 dataimport?command=full-import , 需要访问两次 , 如果还是不行 , 则把 webapps\solr\conf\multicore\core0\conf 目录下的 dataimport.properties 文件删掉 , 重新访问导入数据试试看 。
这时候可以访问 select?q=*:* 来查询所有的索引数据 , 看看新配置的索引是否已经启用 , 如果没有新配置的索引 , 则重新执行导入数据创建索引 。
重新生成索引成功以后 , 我们访问 /suggest?spellcheck.build=true 对查询组件建立索引,
然后访问 /suggest?q=har 进行查询 , har 是查询的词语 , 如果查询不出来数据 , 访问 /suggest?spellcheck.build=true&q=har 。
如果一切配置正常 , 此时会查询出数据 , 但是 仅仅是匹配查询可以了 , 并没有返回 相近词、匹配结果数等、
----------------------------------------------------------------
在 suggest 的基础上 , 如果我们采用 facet的方式 , 则可以匹配查询 , 还带有匹配查询的单结果数量 , 如下访问
select?spellcheck.build=true&rows=0&q=*:*&facet=true&facet.field=text_autocomplete&facet.mincount=1&facet.prefix=hear
注意 , 这里用的是 select 接口 , 而不是 suggest 接口 , 这里的访问URL需要替换的是 :
facet.field 是 schema.xml 里的配置字段
facet.prefix 是查询的关键字 或 短语
facet 的方式相对于 suggest 的方式性能上差些 。
分享到:
相关推荐
solr3.5开发教程solr3.5开发教程solr3.5开发教程solr3.5开发教程solr3.5开发教程
Solr3.5整合Tomcat的,在压缩包里面有一个readme,只需要修改三个地方就可以直接启动了。
solr3.5与tomcat的部署配置步骤 文档中有截图说明
solr 3.5 tomcat 整合可直接使用
solr3.5与tomcat的部署配置以及与java项目的集成 大部分步骤都有截图说明 一目了然
Apache Solr 是一个开源的搜索服务器,Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache ...定制 Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述所有 Field 及其内容的 XML 文档就可以了。
solr 3.5 tomcat 整合可直接使用
基于Solr3.5的最新开发应用指导,文字加代码说明模式(Schedule.xml)、配置(solrconfig.xml)、索引,搜索等详细开发内容。
solr3.5配置及应用[借鉴].pdf
solr是最好的开源搜索引擎,3.5版本比较稳定。
初学者学习solr时,可以借助此文档入门,学习solr
solr 与 tomcat 集成的完整步骤
在tomcat环境下搭建solr和mmseg4j搜索引擎 在tomcat环境下搭建solr和mmseg4j搜索引擎
包涵apache-solr-core-3.5.0.jar和apache-solr-solrj-3.5.0.jar两个文件,搭建solr全文检索环境必须要添加的包
solr_3.5_配置及应用
Solr是一种企业级的全文搜索引擎,有关Solr与Tomcat整合的详情请参见博文:http://blog.csdn.net/l1028386804/article/details/49914367
Solr是一个独立的企业级应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的xml文件, 生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回...
Solr 3.5开发应用教程,偏实战
用于solr架设开发者参考,版本solr3.5 tomcat6
用于solr开发初学者 环境tomcat6 solr3.5