Lucene是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lucene是啥?相关的知识,希望对你有一定的参考价值。

查了一些资料,lucene是一个全文检索的东西
是说得配合字典才能进行分词、提取关键词吗?
谢谢!
那不配合字典如何分词呢?
比如“我是学生”,没有字典,他怎么知道“学生”是一个词而不是两个字呢?

再次感谢!
那你上面说的““可以配合字典分词,提取关键字”,而不是必须 ”是什么意思呢?

Lucene针对中文单字为词,“我是学生”在standardAnalyzer分割下,分为“我”,“是”,“学”,“生”。
车东做了CJKAnalyzer可以分为“我是”,“是学”,“学生”。
你也可以用Dijkstra算法来自己做一个,源代码向家立要,他和我写过《Lucene分析与应用》,他会告诉你去如何下载这个代码,这种分词都是有经验值的,也就是说“学生”,已经是分割过的,就是有字典存在。
不配合字典你再想一想,自然语言是什么?是人类的交谈工具吧,有没有规律哪?频率,位置依赖关系,但是不管如何,人类自己要能明白,没有人类自身的经验,就别谈“分词”,“字典”。
分词与Lucene关系不大,它只是输入,虽然也会影响索引,与效率,效能,但是Lucene与你谈论的问题关系不太大。
参考技术A 一种全文检索引擎
应该说是“可以配合字典分词,提取关键字”,而不是必须
配合字典的话会有较强的专业性和精度

答案是:如果没有字典,就不知道“学生”是一个词

如果你的字典里有“学生”,就找到了,如果你的字典里也没有,那也找不到。

这就是字典对精度的影响,当然也取决于算法。

如果你的字典里有“好学”,又有“学生”
那么对于“好学生”可能的情况是,分词结果为“好学/生”而不是“好/学生”

在 Web 项目中使用 SOLR 的最佳方法是啥?

【中文标题】在 Web 项目中使用 SOLR 的最佳方法是啥?【英文标题】:What's the best approach for using SOLR with web projects?在 Web 项目中使用 SOLR 的最佳方法是什么? 【发布时间】:2010-12-14 21:12:12 【问题描述】:

好的,我对 SOLR 和 Lucene 完全陌生,但是在 Tomcat 6.x 下已经让 Solr 开箱即用,并且刚刚浏览了一些基本的 Wiki 条目。

我有几个问题,也需要一些建议。

    Solr 可以索引文件(XML、CSV)中的数据,也可以索引 DB。你也可以将它指向一个 URI/域,并让它以谷歌的方式索引一个网站吗?

    如果我有一个网站,其中包含“页面”数据,即“页面名称”、“页面内容”等,以及“产品数据”,即“产品名称”、“SKU”等,我是否需要两个不同的 Schema.xml 文件?如果是这样,这是否意味着 Solr 的两个不同实例?

最后,如果您有一个包含大型关系和规范化数据库的项目,您认为以下 3 个选项中的最佳方法是什么?:

    在后台运行一个中间件服务,它挖掘数据库并手动创建相关的 XML 文件,然后发送到 SOLR

    让 SOLR 直接索引 DB。在这种情况下,最好只将 SOLR 指向视图,这将抽象所有表关系?

    还有其他我不知道的选项吗?

上下文:我们在 Windows 2003 环境、.NET 3.5、SQLServer 2005/2008 中运行

干杯!

【问题讨论】:

【参考方案1】:
    不,您需要一个爬虫,例如Nutch 是的,您需要两个单独的索引(= 两个 schema.xml),因为数据集似乎不相关。这并不意味着两个 Solr 实例,您可以使用 Cores 管理这两个索引。

至于填充 Solr 索引,这取决于您的特定项目,例如,它是否可以容忍过时的数据或是否必须绝对新鲜。

索引数据的其他选项包括:

数据库触发器 如果您使用某种 ORM,请使用它的拦截功能。例如,您可以使用 NHibernate 事件在更新、插入或删除时更新索引。如果你使用 NHibernate 和 SolrNet 这是taken care of automatically

【讨论】:

+1 谢谢 Mauricio,这真的很有用。我想知道您是否可以在一点上扩展一点,可能是两个。就陈旧数据和新数据而言,我使用什么数据源并不重要吗?只有我多久提交一次更改...假设所有提交(添加/更新/删除)必须手动完成,对吗?至于 SolrNet,我根本不需要担心手动与 SOLR 通信吗?再次感谢 关于数据新鲜度:这取决于数据的用户(消费者)。如果消费者需要始终查看可以排除离线/后台索引方法的最新数据,那么您必须使用更具反应性的东西,例如触发器或 ORM 拦截。当然,在索引网页时您没有任何“触发器”,您唯一的选择是爬虫。是的,SolrNet 处理 .Net Solr 通信。 @mauricio:谢谢。我们使用自定义 CMS 来构建我们的网站。那么,您认为每当在 CMS 中编辑页面/产品时,通过 XML 向 Solr 提交更新/删除是一个明智的决定吗?而且我们不使用 Nhybernate,所以我想 SolrNet 没有任何好处。再次感谢,这真的很有帮助 NHibernate 集成只是 SolrNet 的功能之一。它的主要目的是处理所有 Solr XML / HTTP 通信,并为所有 Solr 操作提供一个 .Net 接口。 感谢 Mauricio,我想我会使用 Solrnet,感谢开源。 Solrnet 是否负责为 Solr 编写模式?如果是这样,如何?如果没有,那么我必须自己编写架构吗?干杯!【参考方案2】:

我认为毛里西奥非常愿意听取他的建议。我要说的唯一一点是,在决定使用“中间件”索引器或直接使用数据库时。如果您的数据库(或视图?)与良好的 Solr 模式所需的映射非常接近,那么 DIH 就很棒。但是,如果您要从多个数据源建立索引,或者如果您必须调整数据库中的数据以满足 Solr 的需求,那么使用专用的中间件索引器会更好。

【讨论】:

“死”,我的意思是非常准确!以防万一有人感到困惑! 很酷,感谢 Eric 的额外建议。我只是想知道拥有中间件是否完全愚蠢,但我认为这在一个环境中是有意义的,正如你所说,数据源是多种多样的。干杯! +1

以上是关于Lucene是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Lucene 8.5.1 中 IndexReader.getTermVector(int docID ,String field) 中的 docID 是啥,它是如何工作的?

将“流行”因素与 zend-search lucene 正确集成的最佳方法是啥?

Lucene初探之如何创建索引

Lucene初探之如何创建索引

搜索引擎系列二:Lucene(Lucene介绍Lucene架构Lucene集成)

Lucene入门精讲视频教程