【问题标题】:How should I modify Lucene in order to search differently?我应该如何修改 Lucene 以进行不同的搜索?
【发布时间】:2014-02-11 11:53:08
【问题描述】:

我不是Lucene 的专家,但我想修改它以满足以下要求:

我将每个句子视为不同的文档并对其进行索引以测试搜索。

例如,

输入句子: Sam 吃苹果。杰夫吃橘子。山姆山姆和山姆只吃苹果。 Jeff jeff and only jeff 吃橘子 橘子也只吃橘子。

当前搜索

当我搜索“Sam eats apples”时,当前的 Lucene 搜索得分“Sam sam and sam eats apples and only apples.”最高,因为它包含这些术语像 "sam"、"eats" 和 "apples" 更多,文档出现在顶部。

修改后的搜索(我想要的)

现在,当我搜索“Sam eats apples”时,我希望文档“Sam eats apples”得分最高,因为它得到了完全匹配(以及根据查询的顺序,即 Sam(第一)、eats(第二)和 apples(第三)。

我想做的事: 进行自定义查询、权重和评分(通过扩展 QueryWeightScoring 类)。

可行吗?和价值?或者除此之外还有其他选择吗?

任何建议对我来说都很有价值,因为我只是Lucene 的初学者。

【问题讨论】:

  • 这是最艰难的路线,Weight 是许多优化发生的地方。试着看看其中一个标准实现,我保证让你头晕目眩。
  • 我也相信现有的库已经足够支持你的查询类型了。
  • 嗯,谢谢提醒。
  • 你签出PhraseQuery了吗? stackoverflow.com/questions/5527868/…
  • 还没有。我想我需要看看它。

标签: java search lucene


【解决方案1】:

如果您按照@MarkoTopolnik 的建议将PhraseQuery 与其他查询相结合,则将该查询的 slop 设置为 0(默认设置),这将确保包含提供的搜索的文档单词及其序列将包含在结果和setBoost 中,因为PhraseQuery 大于1.0,这将增加PhraseQuery 获得的结果的分数。我不知道这是否是满足您需求的最佳解决方案,但它在类似情况下对我有用。我不得不提供超过 4.0 的提升,后来我发现我的查询组合还有改进的余地。在优化了我用来组合多个查询的BooleanQuery 之后,我能够在 1.0 到 2.0 之间调整引导值

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 2012-03-04
    • 2010-11-27
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多