solr5.3.1 ik4.10对应哪个版本的IK

支持Solr4的IKTokenizerFactory - 创意恒动力 - ITeye技术网站
博客分类:
近日公司开始改造旧有的搜索系统,用到solr4,而且本人关注IK分词器比较多。发现IK 2012对TokenizerFactory不支持,缺乏这个支持的话,有很多自定义配置功能用不上。
故开发此代码,兼容Solr4分词功能
代码测试可用
附件附上对IK2012代码的二次编译jar包
IKTokenizerFactory
package org.wltea.analyzer.
import java.io.IOE
import java.io.R
import java.util.M
import org.apache.lucene.analysis.T
import org.apache.lucene.analysis.util.ResourceL
import org.apache.lucene.analysis.util.ResourceLoaderA
import org.apache.lucene.analysis.util.TokenizerF
import org.wltea.analyzer.lucene.IKT
* 主要用于Solr分词使用
* @author niko
* @version
public class IKTokenizerFactory extends TokenizerFactory implements ResourceLoaderAware {
private boolean useS
public void init(Map&String, String& args) {
super.init(args);
assureMatchVersion();
public Tokenizer create(Reader input) {
IKTokenizer ikTokenizer = new IKTokenizer(input, useSmart);
return ikT
public void inform(ResourceLoader loader) throws IOException {
useSmart = getBoolean("useSmart", true);
schema.xml调用方法:
&fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100"&
&analyzer type="index"&
&tokenizer class="org.wltea.analyzer.henry.IKTokenizerFactory" useSmart="true"/&
&filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /&
&!-- 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="solr.LowerCaseFilterFactory"/&
&/analyzer&
&analyzer type="query"&
&tokenizer class="org.wltea.analyzer.henry.IKTokenizerFactory" useSmart="false"/&
&filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /&
&filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/&
&filter class="solr.LowerCaseFilterFactory"/&
&/analyzer&
&/fieldType&
下载次数: 192
浏览: 48179 次
来自: 广州
您好,我现在也遇到同样的问题,使用您写的IKTokenizer ...
eight90 写道它的main函数呢?main函数还要列出来 ...
deydoris 写道算法里面的分词是用的什么算法咩?开源的还 ...
它的main函数呢?
算法里面的分词是用的什么算法咩?开源的还是亲自己写的分词算法呀 ...&本站源码:
DevNote公布网站源代码,点击这里查看。
&扫描二维码下载Android客户端:
或直接点击二维码图片下载到电脑
&所有系列:
&博主排名TOP5:
&广告赞助:
原创&Solr配置停止词/排除词ext.dic(IK版)
作者:,&&
发表于: 18:19:40,&&
更新于: 18:19:50,&&
停止词是无功能意义的词,比如is 、a 、are 、”的”,“得”,“我” 等,这些词会在句子中多次出现却无意义,所以在分词的时候需要把这些词过滤掉。
测试于:Solr 4.5.1, IK Analyzer 2012FF_hf1, Jdk 1.6.0_45, Tomcat 6.0.37 | CentOS 5.7
配置方法比较简单,参见扩展词配置:
如过此内容对您有帮助,欢迎以点击广告的形式来支持我们,但请每天不要多于一次,否则可能被识别恶意点击,导致封号。
相关文章:| 时间排序
真到了PB级就要优化了
真到了PB级就要优化了
负责任的话用%like% + 纠正,不负责任就直接用开源产品。&br&&br&淘宝不负责任地用开源产品,导致后果就是如果用户搜索的词不在淘宝的索引列表中,那么就算有这个词也搜不到。
负责任的话用%like% + 纠正,不负责任就直接用开源产品。淘宝不负责任地用开源产品,导致后果就是如果用户搜索的词不在淘宝的索引列表中,那么就算有这个词也搜不到。
都用solr就行啦
都用solr就行啦
solr本就支持基础的数据过滤:&br&&br&数值型字段直接用Field:[valueA TO valueB]&br&&br&你例子中的保障、授权只是一个字段而已,单值、多值都可以&br&&br&solr的facet可以直接统计每一个选项的数量,facet设置!ex和!tag可以生产复杂多变的组合过滤条件;facet.pivot可以实现分组再分组统计&br&&br&group可以实现分组去重复、分页&br&&br&dismax/edismax中bq、bf可以实现你想要的复杂排序,非常复杂都可以&br&&br&solr的ValueSourceParser和ValueSource可以实现自定义排序计算函数&br&&br&继承DefaultSimilarity,可以实现自定义的分词得分计算,重载tf、idf、queryNorm等等在空间向量模型中至关重要的方法
solr本就支持基础的数据过滤:数值型字段直接用Field:[valueA TO valueB]你例子中的保障、授权只是一个字段而已,单值、多值都可以solr的facet可以直接统计每一个选项的数量,facet设置!ex和!tag可以生产复杂多变的组合过滤条件;facet.pivot可以实现分组再…
为什么不把价格放到索引里?明明有range查询你不用
为什么不把价格放到索引里?明明有range查询你不用
Jetty vs. Tomcat&br&We recommend staying with Jetty when first learning Solr. If your organization uses&br&Tomcat or some other Java web-application server, such as Resin, you can deploy the&br&Solr WAR file. Because we’re getting to know Solr in this chapter, we’ll refer you to&br&chapter 12 to learn how to deploy the Solr WAR file.&br&Solr uses Jetty to make the initial setup and configuration process a no-brainer. But&br&this doesn’t mean that Jetty is a bad choice for production deployment. If your organization&br&already has a standard Java web-application platform, then Solr will work&br&with it. But if you have some choice, then we recommend you try out Jetty. It’s fast,&br&stable, mature, and easy to administer and customize. In fact, Google uses Jetty&br&for its App Engine—see &a href=&///?target=http%3A//q.com/news/2009/08/google-chose-jetty/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Google Chose Jetty for App Engine&i class=&icon-external&&&/i&&/a&—which&br&gives great credibility to Jetty as a solid platform for running Solr in even the most&br&demanding environments!&br&&i&&b&from 《Solr in Action》&/b&&/i&
Jetty vs. TomcatWe recommend staying with Jetty when first learning Solr. If your organization usesTomcat or some other Java web-application server, such as Resin, you can deploy theSolr WAR file. Because we’re getting to know Solr in th…
solr 有提供全匹配的搜索,加双引号。
solr 有提供全匹配的搜索,加双引号。
建议使用Elasticsearch和solr一样,使用lucene&br&这个和php无关,因为无论哪个工具,都是通过网络接口查询,所以我不回答有关是否适合php的情况~~&br&&br&## ES 缺点&br&基于java,会有一些java的常见问题需要注意,比如gc&br&单纯执行速度上比C写的sphinx慢&br&&br&## sphinx 优点&br&纯粹,没有什么花哨的其他功能&br&C写的,速度快&br&新版本加了分布式、动态更新索引等功能&br&&br&## 下面列举Es比sphinx优秀的部分&br&1、部署简单,虽然sphinx部署也挺简单,但是在书写配置的时候,你会发现,sphinx的配置是要写好后,重启sphinx,而Elasticsearch针对某个索引的配置,是可以动态写入的。&br&2、调试简单,sphinx有命令行工具可以调试,而Elasticsearch使用的是http接口进行调试,不需要专门的API类,几行php代码就可以写一个Elasticsearch的API。&br&3、可视化工具比较多,有收费的,也有免费的,比如kibana head marvel。&br&4、提供结构化的JSON查询语句,易读性强&br&5、Es可以保留源数据(可选),也就是说,你可以不需要mysql的支持,就可以完成整个搜索过程,即使你不需要这个功能,在调试的时候,还是让人感到非常便利,不用将查询结果到数据库匹配一下。&br&6、Es可以动态更新全文索引,动态更新单个记录,而不像sphinx一样需要重建全部&br&7、对UTF8的支持是不需要单独配置的&br&&br&## 从中文分词上来说&br&首先我觉得分词最重要的基本都是词库,分词算法两个工具基本都可以使用。&br&lucene 支持很多分词工具,比如&br&word &a href=&///?target=https%3A///ysc/word& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/ysc/word&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&比如ik &a href=&///?target=https%3A///medcl/elasticsearch-analysis-ik& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/medcl/elasti&/span&&span class=&invisible&&csearch-analysis-ik&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&这两个工具最近都很活跃,因为Es更新2.0 和 2.1&br&&br&比较分词区别(sphinx可能有误):&br&sphinx分词 我不太熟悉它的机制,多数情况下我使用scws分词,发送给sphinx,然后设置匹配规则,比如最大匹配(我基本都是基于模糊匹配在用sphinx)&br&&br&Es的全文索引是基于分词的,也就是事先分好词,每个词对应某些记录,自动进行TF/IDF的运算,得到一个评分后返回,当然这个评分可以改(sphinx同样支持修改评分),这种检索方式肯定更快,但是受到分词限制,所以我每个字也分词,然而这样可能影响分数判断。&br&&br&另一方面ES也支持类似sphinx的匹配方式,叫做fuzzy,模糊匹配,一般会一起使用,一个词不在分词库中的时候,就用fuzzy,所以Es在功能上,应该和sphinx不会有太多差别,而且应该要更多。&br&&br&## 个人方面&br&我在使用shpinx的时候,会查3次,一次完全按照用户输入的查(如果用户没有输入空格),一次按照空格分开查或者分词系统分词结果查,一次按照单个字来查(前提是前面两个结果太少)。&br&&br&在用Es的时候,如果没有办法正确分词,会按照fuzzy + 单字查(可以同时进行),如果有办法分词,按照分词结果 + 单字查(可以同时)&br&&br&## 后期维护上:&br&sphinx的配置文件在mysql分表之后,维护起来是比较麻烦的,你可以用php脚本当做配置文件,这样会好很多。&br&Es的索引是可以主动发给它去建立的(通过http接口),分表之后,它不关心数据库状态和结构。新增字段可以热更新。&br&&br&## 扩展性上:&br&Es和sphinx都支持分布式索引,扩展性都没有问题&br&两者都支持别名,Es的别名加上动态建立索引,使得更换索引结构或者重建索引后,支持0宕机时间。而sphinx的rotate选项可以动态更新索引(不知道能不能动态创建索引,因为sphinx我在使用的时候,索引都要求写在配置文件里。&br&性能方面没有测试数据。从直观感受上sphinx要快一些。
建议使用Elasticsearch和solr一样,使用lucene这个和php无关,因为无论哪个工具,都是通过网络接口查询,所以我不回答有关是否适合php的情况~~## ES 缺点基于java,会有一些java的常见问题需要注意,比如gc单纯执行速度上比C写的sphinx慢## sphinx 优点纯粹…
搬运工吧,n久前也纠结在搜索工具的选择上,把我收藏的连接分享给你:&br&&a href=&///?target=http%3A///en/system/Solr%253BSphinx& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Solr vs. Sphinx Comparison&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///questions/737275/comparison-of-full-text-search-engine-lucene-sphinx-postgresql-mysql& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Comparison of full text search engine&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///questions/2271600/elasticsearch-sphinx-lucene-solr-xapian-which-fits-for-which-usage/288211& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ElasticSearch, Sphinx, Lucene, Solr, Xapian. Which fits for which usage?&i class=&icon-external&&&/i&&/a&&br&&br&偷懒不想看英文的话,就看下这个中文的:&br&&a href=&///?target=http%3A///blog/1560834& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&主流全文索引工具的比较( Lucene, Sphinx, solr, elastic search)&i class=&icon-external&&&/i&&/a&&br&&br&-------------------------------------------------------------&br&最后我选择的是lucene......至于为什么不用solr,因为我有强迫症,想从底层了解起来,solr加了很多特性功能以应付企业级的搜索需求,相当于对lucene做了一个更高级的包装,但有时候Lucene很多新特性不能及时向上传递,so,我只是想更知道的知道基础是啥,果断是lucene。&br&&br&-------------------------------------------------------------&br&感觉答非所问&&!!
搬运工吧,n久前也纠结在搜索工具的选择上,把我收藏的连接分享给你:偷懒不想看英文的话,就看下这个中文的:
建议用solr,业界用的多,各种坑都淌过,分片也算方便
建议用solr,业界用的多,各种坑都淌过,分片也算方便
solr提供http请求查询接口。客户端通过触发http请求获取json、xml等数据格式数据,并对数据进行解析显示。一般情况下各种语言都会有封装好的客户端插件,如java的solrj、python的solrpy,php的php-solr-client,根据提供的api进行索引和查询。至于solr的安装配置可以去看看solr cookbook 这本书.
solr提供http请求查询接口。客户端通过触发http请求获取json、xml等数据格式数据,并对数据进行解析显示。一般情况下各种语言都会有封装好的客户端插件,如java的solrj、python的solrpy,php的php-solr-client,根据提供的api进行索引和查询。至于solr的安…
要让php程序用上solr搜索,刚开始心里犯怵&br&我不会java怎么办?&br&搜素系统的索引怎么建立?&br&php怎么写代码?&br&&br&solr是java写的,是一个服务器程序,有一个管理界面,提供http接口&br&除了配置文件不用写java代码、php有solr的扩展&br&&br&所以,还算简单&br&1,安装solr和验证你安装上了&br&参考 &a href=&///?target=http%3A///image-text/install/90.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CentOS下安装Solr5.3&i class=&icon-external&&&/i&&/a&&br&solr5.3已经是单独的服务器,包括web管理后台,所以挺好的&br&只需要保证你的linux 有jdk&br&直接下载 solr5.3的包,&a href=&///?target=http%3A//www.apache.org/dyn/closer.lua/lucene/solr/5.3.1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Apache Download Mirrors&i class=&icon-external&&&/i&&/a&&br&一定要下载solr5.3.tgz 这样的,不要下src的包,然后解压得到类似solr5.3这样的目录&br&&br&安装最关键的两点 1 不是解压就能用 solr目录下有个 install脚本要运行,并且要指定data目录(要存储索引)2 solr 有一个core的概念,理解成数据库里的db吧,可以建立一个core,这个也有脚本,但一定保证data目录是solr用户的权限&br&&br&# solr-5.3.0/bin/install_solr_service.sh solr-5.3.0.tgz -d /data/solr -i /usr/local&br&-i表示你把solr服务器装在哪&br&&br&# su - solr -c &/usr/local/solr/solr/bin/solr create -c corename&br&创建一个你自己的core&br&&br&service solr start 启动服务&br&&br&http://你的ip::8983/solr 这个是管理界面&br&&br&2,设计你自己的搜索索引&br&http://你的ip::8983/solr 这个是管理界面,选择你创建的core&br&只关注 add Documents 和 query 即可,一个事加索引一个事查询,特别容易理解&br&&br&add Documents界面,已经有例子,索引了两个字段 id和title ,你改下数据提交&br&Query 界面
q=*:* 查询所有&br&q=title:a* 查询title为a开头的&br&&br&简单玩几次很容易明白&br&&br&现在有id,title 我想添加一个自己的字段,type怎么办?&br&去data目录grep &title&, 找到id和title的配置项,类似:&br&&field name=&title& type=&text& indexed=&true& stored=&false& multiValued=&true&/&&br&参考下填写上type即可&br&&br&service solr stop/start 重启服务&br&回到管理界面,添加数据,假设你要联合搜索title和type&br&那么 q=
fq= type:xx, 多加一个fq明白了吧&br&&br&3,写一个php程序&br&经过1,2个研究,基本能做到建立数据,查出数据现在就写一个php程序完成这些功能&br&参考:&a href=&///?target=http%3A//php.net/manual/en/book.solr.php& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&PHP: Solr - Manual&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A//php.net/manual/en/class.solrinputdocument.php& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SolrInputDocument&i class=&icon-external&&&/i&&/a&
输入文档&br&&a href=&///?target=http%3A//php.net/manual/en/class.solrclient.php& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SolrClient&i class=&icon-external&&&/i&&/a&
这个是用户连接solr服务器&br&&a href=&///?target=http%3A//php.net/manual/en/class.solrquery.php& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SolrQuery&i class=&icon-external&&&/i&&/a&
这个是构建搜索条件
&br&直接上程序好了:&br&&br&class
Search&br&{&br& private $&br&&br& public function __construct() {&br&
$options = &br&
'hostname' =& 'localhost',
//solr服务器的ip&br&
'path' =& 'solr/corename',
//这个解决core的问题,corename就是你的core&br&
'wt' =& 'json',&br&
];&br&&br&
$this-&client = new \SolrClient($options); &br& }&br&&br&
public function addIndex($id, $type, $content) {//加索引的函数&br&
$doc = new \SolrInputDocument();&br&&br&
$doc-&addField('id', $type . &.& . $id); //保证id唯一我把type加上了&br&
$doc-&addField('type', $type);&br&
$doc-&addField('title', $content);&br&
$client = $this-&&br&&br&
$updateResponse = $client-&addDocument($doc);&br&
$client-&commit();
//一定要commit才能立即生效&br&&br&
$ret = ($updateResponse-&getResponse());&br&
if ( isset($ret-&responseHeader['status']) ) {&br&
return $ret-&responseHeader['status'] == 0?true:&br&
public function search($key, $type=0, $page=0, $limit=15) {&br&
$query = new \SolrQuery();&br&&br&
$query-&setQuery('title:' . $key . &*&); //这个是设置keyword&br&
$query-&setStart($page); //分页的&br&
$query-&setRows($limit);&br&
if($type) {&br&
$query-&addFilterQuery('type:' . $type);
//用到fq了&br&
$query-&addField('id')-&addField('title')-&addField('type'); //这里是你要查哪些字段&br&
$client = $this-&&br&
$query_response = $client-&query($query);&br&&br&
$response = $query_response-&getResponse();&br&
$response = ($response-&response);&br&
if ( is_array($response-&docs) ) {&br&
foreach($response-&docs as &$doc) {&br&
$id = explode(&.&, $doc-&id);&br&
if( isset($id[1]) ) {&br&
$doc-&id = $id[1];&br&
$doc-&type = isset($doc-&type[0])?$doc-&type[0]:'';&br&
return ($response);&br&
}&br&}&br&&br&我的微信
要让php程序用上solr搜索,刚开始心里犯怵我不会java怎么办?搜素系统的索引怎么建立?php怎么写代码?solr是java写的,是一个服务器程序,有一个管理界面,提供http接口除了配置文件不用写java代码、php有solr的扩展所以,还算简单1,安装solr和验证你安装…
没用过Sphinx,倒是用过Lucene/Solr(Solr是基于Lucene的,而且貌似大家都没用过Sphinx啊。。。)&br&所以只能推荐Solr/Lucene了,Lucene出来的比较早,也算是久经考验吧,而且在大数据量,分布式上可能Lucene/Solr更适合些(Lucene他爹是先写出了Lucene,然后写出了Hadoop)&br&题主还可以关注下ElasticSearch,也是基于Lucene的,算是Solr的兄弟吧,貌似挺好用的。
没用过Sphinx,倒是用过Lucene/Solr(Solr是基于Lucene的,而且貌似大家都没用过Sphinx啊。。。)所以只能推荐Solr/Lucene了,Lucene出来的比较早,也算是久经考验吧,而且在大数据量,分布式上可能Lucene/Solr更适合些(Lucene他爹是先写出了Lucene,然后…
推荐Solr,有SolrCloud支持分布式,搭建也很方便,也有一些个人倾向(我用的Solr),也比较信赖Apache下的产品,Sphinx了解不太多!
推荐Solr,有SolrCloud支持分布式,搭建也很方便,也有一些个人倾向(我用的Solr),也比较信赖Apache下的产品,Sphinx了解不太多!
泻药。目前项目刚好选择了solr。有几方面考虑,之前接触过lucene,开源分词器丰富灵活。solr搭建方便,solrclound业界使用较多。php官方已有solr扩展。推荐《solr in action》。
泻药。目前项目刚好选择了solr。有几方面考虑,之前接触过lucene,开源分词器丰富灵活。solr搭建方便,solrclound业界使用较多。php官方已有solr扩展。推荐《solr in action》。
应付常见的日志摘要和分析是没问题的,按三斗说的数据来看,上PB级的数据量也不是难事。&br&&br&但数据容量,二次抽洗,以及周边生态,还是没有Hadoop来得好
应付常见的日志摘要和分析是没问题的,按三斗说的数据来看,上PB级的数据量也不是难事。但数据容量,二次抽洗,以及周边生态,还是没有Hadoop来得好
用nginx的auth_request模块搞定。
用nginx的auth_request模块搞定。

我要回帖

更多关于 solr5.2.1配置ik分词 的文章

 

随机推荐