【问题标题】:Can I boost Lucene query parser results based on expected data?我可以根据预期数据提升 Lucene 查询解析器结果吗?
【发布时间】:2023-04-06 16:12:01
【问题描述】:

我有一个 Lucene 索引,其中一个索引字段包含一个标识内容类型的字符串。

为简单起见,假设该字段名为_type,并且只会包含typeonetypetwo

我正在使用 Lucene 查询解析器语法来查询这个索引。假设我的查询是:

(+fieldone:term^3.0 +classname:term^2.0)

是否可以扩展此功能以提升在其_type 字段中包含typeone 的任何结果,同时仍返回typetwo 记录(尽管相关性得分较低)?

更新

我找到了一种有效的语法,但它使用通配符“所有文档”语法,我怀疑这种语法效率不高。建议表示赞赏。

(+fieldone:term^3.0 +classname:term^2.0) +(*:* _type:typeone^1.1)

【问题讨论】:

    标签: asp.net lucene


    【解决方案1】:

    仅使用 Lucene 语法,您可以通过以下方式简单地将 _type 提升保持为应该:

    +fieldone:term^3.0 +classname:term^2.0 (_type:typeone)^2 
    

    您不需要通配符。

    另一种解决方案是使用 eDismax 查询解析器,然后您可以使用 bqbf 参数来提升字段的特定值。您可以使用以下解决方案之一:

    解决方案 1:您可以通过以下方式提升您的任期:

    defType=edismax&bq=_type:"typeone"^3
    

    解决方案2:您可以通过以下方式使用查询功能:

    defType=edismax&bf=if(termfreq(_type,"typeone"),3,if(termfreq(_type,"typetwo"),2,1))
    

    如果 _type=typeone 的结果增加 3,typetwo 的结果增加 2,否则为 1。您可以根据需要修改该查询。

    【讨论】:

    • 嗨。感谢您的回答。我不熟悉 eDismax,但快速测试表明这与我正在做的事情不兼容。我需要 Luke getopt.org/luke 可解析的语法 - 但无论如何谢谢。
    • 在这种情况下,您可以通过以下方式简单地保持 _type 提升 +fieldone:term^3.0 +classname:term^2.0 (_type:typeone)^2,您不需要通配符。
    • 所以你可以!我对这种语法只有非常基本的了解。好消息。谢谢你。如果您将此添加为答案,我将标记为已接受。
    • 很高兴这解决了您的问题。我刚刚编辑了我之前的答案,添加了评论中发布的解决方案。干杯。
    猜你喜欢
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多