gpt4 book ai didi

solr - 如何在 SOLR 中实现复杂的 token 匹配算法

转载 作者:行者123 更新时间:2023-12-02 05:08:08 28 4
gpt4 key购买 nike

问题描述

我正在尝试实现自定义算法,以将用户提供的自由文本 输入(公司名称,如“福特汽车”)与包含 140 万个公司名称的引用数据源相匹配。

算法执行以下步骤:

第 1 步) 对用户提供的搜索输入执行“精确匹配”,然后是“开始匹配”,最后是“包含匹配”。此步骤的结果也按相同顺序排序。

第 2 步) 通过将搜索输入与引用公司名称进行标记匹配来执行标记。

每个标记都按以下顺序匹配:Exact、Begins、Contains、Levenshtein Distance (< 0.2) 和 Refined Soundex。

例如如果用户输入是“Foord Motur Holding”并且它正在与“The Ford Motor Holdings Company”匹配,那么第一个标记“Foord”将根据 Soundex 匹配匹配“Ford”,第二个标记“Motur”将根据编辑匹配“Motor”距离算法和最后一个标记“Holding”将通过 Begins 匹配匹配“Holdings”。

评分:每个标记匹配首先根据匹配技术的评分等级进行评分,精确匹配是最好的,Soundex 是最差的。

总分是通过计算单个 token 匹配分数的加权平均值来计算的,范围为 0-100%。权重是根据 token 的索引顺序分配的,即第一个 token 的权重最高,最后一个 token 的权重最低。

我的部分解决方案

我在 solr 中实现了一个简单的模式来存储引用公司名称。一个字符串字段(称为 companyName)、一个从字符串复制的简单文本字段(称为 companyText)和另一个从字符串复制的文本字段(称为 companySoundex)并使用 PhoneticFilterFactory 进行基于精炼 Soundex 的匹配。

我已经能够在单个 solr 查询中复制步骤 1)。

对于第 2 步),我计划向 solr 服务器发出 3 个并行查询。第一个查询在 companyText 字段上执行简单的文本搜索,第二个查询在 companyText 字段上使用 ~ 运算符执行模糊匹配,第三个查询在 companySoundex 字段上执行 soundex 匹配。我计划以某种方式组合这 3 个并行查询的结果以获得所需的最终结果。

问题:

1) 是否有更好的方法来复制原始算法的步骤 2)?

2) 即使我采用“三并行查询”方法,那么如何获得与原始算法相同的“正确”排序顺序?我想主要的问题是如何比较这 3 个完全不同的查询的 solr 分数以进行结果的最终组合

感谢阅读这么长的问题。任何帮助/指点将不胜感激。

最佳答案

查看 DisMax 查询解析器。 http://wiki.apache.org/solr/DisMaxRequestHandler

对于每个单独的查询,您实际上会在索引中建立单独的字段以进行匹配。然后使用 DisMax 以加权方式组合查询。

我建议现在放弃您的 3 并行查询方法。上次我调查这个问题时,不可能将来自 2 个单独查询的分数关联起来。它只是行不通。如果您想要一组按分数排序的结果,则必须弄清楚如何在单个查询中执行此操作。

关于solr - 如何在 SOLR 中实现复杂的 token 匹配算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8771271/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com