【问题标题】:Better search results using Lucene使用 Lucene 获得更好的搜索结果
【发布时间】:2010-02-22 10:26:03
【问题描述】:

我有一个数据库,里面有很多书。我有标题、描述、作者等字段。

我正在用 100f 的提升和 0.1f 的提升来索引标题,这两个字段都被标记化和词干化。

我正在使用单个输入字段进行搜索,该输入字段使用与 BooleanClause.Occur.SHOULD 连接并包含每个字段的通配符查询的布尔查询在所有可用字段中进行搜索。我还从查询中删除了所有“停用词”。

我遇到的问题是当我搜索不带引号的字符串时

“de wetenschap van het leven”,删除停用词后,我得到“wetenschap leven”

Title 查询变为“*wetenschap* *leven*”,description 查询相同,带有一个与 BooleanClause.Occur.SHOULD 连接的包装布尔查询。

以下书籍在数据库中

  • Wetenschappelijk 登肯。恩 医学之声 biomedische wetenschappen en voor de 安德烈·莱文斯韦滕夏普。
  • 德 韦滕夏普范德阿尔德。超过 een 莱文德星球
  • 阿特拉斯范德 menselijke levensloop
  • De wetenschap 范赫特利文。超过enheid in 生物多样性

前 4 本书中的书返回,这很好,但在此实现中,我们在 3 处截断,其余的位于阅读更多链接下方。只是提高临界值不是一种选择

对我来说,“De wetenschap van het leven. Over eenheid in biologische diversiteit”一书与查询“更多”相匹配(或者我觉得),但我无法找到正确的索引/搜索组合使这项工作。有人有想法吗?

【问题讨论】:

    标签: java lucene


    【解决方案1】:

    一些建议:

    1. 不要删除停用词 - 它们似乎是您的搜索查询的重要组成部分。
    2. 不要使用通配符 - 只搜索您需要的单词。我相信最好的办法是使用 PhraseQuery - 例如“de wetenschap van het leven”。
    3. 不要搜索过去的句子结尾。这更加困难 - 您可能需要分别为每个句子编制索引。
    4. 阅读Debugging Relevance Issues in Search - 您可能会在那里获得其他想法。

    【讨论】:

      【解决方案2】:

      我认为 SpanQuery(特别是 SpanNearQuery)可能是您需要的。

      给定一个文件“一只敏捷的棕色狐狸跳过一只懒狗”

      它可以找到“棕狐”和“懒狗”的匹配项。您可以调整 slop 设置以调整两个搜索查询短语/术语之间的距离....简而言之,它为您提供了很多工具来调整您的搜索。

      如果您不熟悉荷兰语 (?) 语言,您可能希望在可能的情况下阻止查询,并避免使用前导通配符 - 它们非常昂贵并且会导致精度和召回率较低。

      【讨论】:

        【解决方案3】:

        我还通过为整个字符串添加短语搜索来提高相关性。这样我们仍然可以得到“搜索所有内容”的行为,并且标题比其他标题更相关。

        【讨论】:

        • 已经有一段时间了,但是您是如何进行全字符串短语搜索的,您是否只进行了两次搜索然后以某种方式合并了结果?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-25
        • 1970-01-01
        • 2011-03-22
        • 1970-01-01
        • 1970-01-01
        • 2014-11-27
        相关资源
        最近更新 更多