【问题标题】:Using self-built approaches in Lucene search engine在 Lucene 搜索引擎中使用自建方法
【发布时间】:2018-11-12 22:26:29
【问题描述】:

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

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

  2. 我们为关键字搜索或短语搜索对文本进行索引的方式有什么区别吗?我应该为关键字搜索和短语搜索创建两个不同的索引吗? (我觉得去掉停用词会影响词组搜索的结果,不去掉停用词会影响关键字搜索的结果,不是吗?)

    李>

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

【问题讨论】:

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


    【解决方案1】:

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

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

    2. 是的,创建将返回准确结果的索引是了解用户将如何搜索索引的一种衡量标准。话虽如此,查询搜索的大部分复杂性来自于人们希望匹配结果浮动到结果列表的顶部,这是通过评分完成的。鉴于听起来您正在寻求覆盖得分,这对您来说可能并不重要。您应该注意,默认情况下,Lucene 将匹配多列的命中,而不是精确匹配单列的单个匹配。这意味着,如果您跨多列存储数据(并且默认跨多列搜索),您的搜索将越来越不“准确”。

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

    【讨论】:

    • 亲爱的@patrick。你能解释一下我第二个问题的答案吗?在我的应用程序中,我需要按关键字搜索,也需要按搭配搜索。因为有人对我说,最好是通过搭配搜索,通过关键字搜索的结果组合结果。所以,我提取了关键词和搭配。但是我不知道我必须为关键字搜索和短语搜索创建不同的索引还是一个索引就足够了?
    • 只有一个索引就足够了 - 您可以将它们存储在索引中的单独列中,并将用户的搜索解析为“ OR ”,如果两者都匹配,则将被加权到顶部。或者,您可以标记搭配和同义词或类似的词,以使这些词浮到顶部。 Lucene 和 Solr 都允许您定义在加权时解释的同义词列表。
    • 好答案。一件不太好的事情。你把lucene和solr混在一起了。那不一样。 lucene 是一个基于 java 的全文搜索库(非常低级)。 Solr 是一个“搜索引擎”,作为基于 lucene 的网络服务器实现。根据您的架构需求,您可以使用其中一种
    • @patrick 。我还有一个问题:我们可以在每个查询中使用多少个关键字?有没有最大数量?还是完全取决于语料库和查询词?如果我想使用搭配而不是关键字怎么办?
    • 您可以查询的字词数量有一个硬性限制(我认为是 1024?)。您可以使用集合来搜索类似的语法,语法如下:field_to_search:('term1' 'term2')
    猜你喜欢
    • 2010-11-26
    • 2011-06-06
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多