solr、Lucene、IKAnalyzer这三者关系是怎样的?

lucene 是开源搜索引擎
solr 是基于 lucene开发的搜索引擎
IK 是中文分词。

  lucene 不是一个搜索引擎,只是一个基础的文件索引工具包,或者叫“搜索引擎开发包”。不能单独作为程序运行,但是可以使用它来开发搜索引擎。你可 以认为它就是一个普通开发包。必须用它开发自己的应用后才能 运行。lucene定义了并处理索引数据的数据结构,在disk上的分布等。提供创建和读取 索引文件的接口。
索引文件是lucene用于存放索引数据的真正位置。

而solr就是一个基于lucene开发包开发的搜索引擎。下载solr包,安装就可以运行,不用再开发。如果你有需要也可以在solr上再开发。 solr安装后根据需要配置一下,就可以索引自己的数据进去,并进行搜索。除solr外还有elastic search 等基于lucene开发的其它 开源搜索引擎。

IKAnalyzer 和solr没有直接关系。 IK 是用来分词的一个工具包,有支持lucene的接口。所谓分词就是把一句话分成一些词语, 英文 可以简单的用空格分割:“this is a cat”.分词后就变为4个词“this” "is" "a" "cat“ 。对于中文句子”这是只猫 “ 就不能简单分割来。怎么分割才有意义呢?有不同的算法来处理中文分词,IK就是其中的一种,用来进行中文分词。
lucene在索引文件前也需要对一些句子分词。所以对于中文 ,要分词可以用IK工具包。 同样做中文分词的还有 庖丁 mmj(后演变为 smartcn, 目前支持最新的solr版本 solr4.3)等中文分词工具。 所以你可以认为  用IK 可以完成lucene索引流程中的分词步 骤。完整的数据索引除了分词还有其它步骤要做。所以可认为IK是一个lucene的 分词插件。用于分中文。lucene还有很多其它语言的分词插件。

上述内容摘自CSDN论坛:http://bbs.csdn.net/topics/390436346?page=1  

当运行分词程序或者包含分词的程序,例如我最近使用到的TF-IDF算法,就会使用到lucene和IKAnalyzer两个jar包。此处参考自:TF-IDF理解及其Java实现

当程序只添加IKAnalyzer时候,程序中的报错为:

  Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/lucene/analysis/Analyzer
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at tf_idf.ReadExtract.cutWords(ReadExtract.java:69)
    at tf_idf.ReadExtract.tfAllFiles(ReadExtract.java:130)
    at tf_idf.ReadExtract.main(ReadExtract.java:205)
Caused by: java.lang.ClassNotFoundException: org.apache.lucene.analysis.Analyzer
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 15 more
此时导入Lucene包即可:

其中IKAnalyzer和Lucene包的版本采用上述博客提供的版本,具体如下:

原文地址:https://www.cnblogs.com/xiangyangzhu/p/5683591.html