在Lucene搜索引擎中使用自建方法

时间:2018-06-03 11:55:54

标签: java lucene full-text-search search-engine keyword-search

我正在寻找一个合适的搜索引擎,我可以使用自己的相似性度量和标记化方法。为此目的引入了Lucene搜索引擎作为一个好的搜索引擎,但我不知道这一点。我在互联网上搜索了Lucene搜索引擎新版本的教程,但大部分页面都来自几年前。我的一些问题如下:

  1. 是否可以更改相似性度量,标记化和词干化方法并在Lucene中使用自建类?如果是的话,怎么做?

  2. 我们如何为关键字搜索或短语搜索索引文本之间有什么区别?我应该为关键字搜索和短语搜索制作两个不同的索引吗? (我想如果我们删除停用词,它会影响短语搜索的结果,如果我不删除停用词,它会影响关键词搜索的结果,不会吗?)

  3. 感谢您提供有关此主题的任何信息。

1 个答案:

答案 0 :(得分:2)

这是可能的,是的,我们在工作场所的几个解决方案上做到这一点。 Here is a reasonable tutorial on how to do this。本教程使用Solr,这是一个很好的Lucene实现。直接回答您的问题:

  1. 是的,有一种方法可以通过覆盖接口并提供自己的实现来实现(参见教程)。可以在不需要覆盖Solr默认配置中的类的情况下完成标记,具体取决于使用标记化所需的时髦程度。

  2. 是的,制作一个能够返回准确结果的索引是了解用户搜索索引的方法。话虽如此,查询搜索的复杂性很大一部分来自于希望匹配结果浮动到结果列表顶部的人,这是通过评分完成的。鉴于你听起来似乎想要覆盖得分,这对你来说可能无关紧要。您应该注意,默认情况下,Lucene会将匹配匹配到多个列,而不是单个列上的单个匹配。这意味着,如果您将数据存储在多个列中(并且默认情况下在多列中进行搜索),则搜索将变得越来越“准确”。

  3. 针对单个列的全文搜索往往是非常准确的短语vs单词,但您最终会得到一个非常大的索引。