【问题标题】:Lucene/AzureSearch closest matchesLucene/AzureSearch 最接近的匹配项
【发布时间】:2018-12-18 22:45:35
【问题描述】:

一位客户询问我不确定如何开发的功能。

任务是这样的:如何找到与查询最接近的匹配项并告诉其中缺少的术语。这有点像 Google 在找不到您的确切查询时所做的事情。

所以该网站有一些服务中包含标签: - 标签1 - 标签2 - 标签3

然后我们要运行一个查询,返回带有所有标签的所有服务。所以我可以做一些类似分组的事情。但假设我还想将最接近的 5 个服务返回给用户正在寻找的服务。例如,可能存在仅匹配 Tag2 和 Tag3 的服务。

我想我可以运行一个分组 OR 查询,但问题是如何按找到的匹配项数对它们进行排序?有什么方法可以创建自定义评分来做到这一点?我怎样才能得到那些不在结果中的术语? (示例中的 Tag1)。

谢谢。

【问题讨论】:

    标签: search lucene azure-cognitive-search


    【解决方案1】:

    当您使用所有标签发出简单查询时,将返回匹配任何标签的文档,匹配更多标签的文档将在搜索结果列表中提升。

    search=Tag1 Tag2 Tag3
    

    如果你想提升匹配所有标签的文档更高,你可以使用Lucene query language的词条提升功能

    search=(Tag1 AND Tag2 AND Tag3)^3 OR Tag1 OR Tag2 OR Tag3&queryType=full
    

    您可以在此处了解有关 Azure 搜索中默认评分功能的更多信息:How full text search works in Azure Search - scoring

    要查看匹配的字词,您可以使用hit highlighting

    【讨论】:

    • 谢谢雅努什。但是我需要的评分是对匹配项数量更多的结果的得分更高,而不仅仅是与它们全部匹配的那些。因此,与 Tag1 和 Tag2 匹配的结果将具有与 Tag2 和 Tag3 相同的分数,但比仅与 Tag3 匹配的结果多。除此之外,我需要点击突出显示的反面。我需要显示那些不在每个部分结果中的术语。
    • 那么默认的评分行为应该对你来说已经足够好了。您是否尝试过它并没有达到您的期望?一旦您知道哪些术语匹配,您就可以确定哪些不匹配。这是您最好的选择。
    • 是的,听起来不错。我还没有尝试过这个解决方案,但是我以前使用过 Lucene,我对如何做到这一点感到困惑。我猜默认评分将按匹配数对服务进行排序。我将不得不使用突出显示的术语提取缺失的术语。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-03-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2017-03-29
    相关资源
    最近更新 更多