问题标签 [relevance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4709 浏览

magento - Magento 搜索引擎相关性问题

我们目前有一个拥有大量库存的 Magento 网站,但我们在 ON SITE 搜索结果的相关性方面遇到了一些问题。我们目前设置为“组合喜欢和全文”,但结果不是我们预期的。例如搜索“Lee Child”(作者),找到三本 Lee Child 书籍,然后是三本作者为“Lauren Child”的书籍,然后是其余的 Lee Child 书籍。

因此,本质上我们希望优先考虑全文搜索并在类似搜索结果之前查看这些结果。我们还希望在缺货产品之前显示库存产品。

我们有一个测试服务器,我读了一篇论坛帖子,上面说目前 magento 拆分搜索查询并显示至少有一个单词的产品。

我们修改了 Mage_CatalogSearch_Model_Mysql4_Fulltext 的第 342 行(针对 CE1.4.2):

并将“OR”更改为“AND”`

小路:app/code/core/Mage/CatalogSearch/Model/Mysql4/Fulltext.php

这是对早期版本的修复,我们目前正在运行 1.5.0.1。

我是否缺少一些东西来修补 Magento 搜索结果的相关性,或者你能在代码中指出我正确的方向吗?

0 投票
3 回答
4061 浏览

mysql - 如何按相关性对mysql搜索结果进行排序?

我有一个与此问题类似的查询

MySQL - 如何按相关性排序?INNODB 表

不同的是,这里我想从 5 个字段中搜索为

add1, add2, add3, post_town, post_code

并且只有post_code字段中的记录不会为空,其他字段记录在某些地方可能为空。如果我搜索关键字kingston,它会返回

这些结果是所有字段add1、add2、add3、post_town、post_code 的组合

我需要这个结果按以下顺序

我当前的 SQL 查询是这样的

所以我需要以搜索关键字开头的记录将首先出现。我怎样才能做到这一点 ?

0 投票
2 回答
2256 浏览

php - MySQL:使用 MySQL 相关搜索的特殊搜索算法

我正在尝试在用户只有一个字段的 MySQL 中进行搜索。该表如下所示:

现在,如果用户只输入blah blubber,则搜索必须检查每个单词是否出现在字段TITLE、或DESCRIOTION中。结果本身应按相关性排序,即字符串在记录中出现的频率。我得到了这个示例数据:FILENAMETAGS

在此示例中,ID 2 必须位于顶部(2x blah,1x blubber),然后是 1(2x blah),然后是 3(1x blah)。这个过程应该是动态的,因此用户也可以输入更多的单词,并且相关性与一个或几个单词相同。

这可能只在 MySQL 中实现,还是我必须使用一些 PHP?这将如何运作?

非常感谢您的帮助!问候,弗洛里安

编辑:这是我尝试了 Tom Mac 的答案后的结果:

我有四个如下所示的记录:

现在,如果我搜索 string s,我应该只得到前三个记录,按 s 的相关性排序。这意味着,记录应该是这样的 orderer:

现在,我尝试了这样的查询(表的名称是PAGES):

此查询返回:

这是因为通配符吗?我认为,字符串*s*也应该找到一个值,它只是s......

0 投票
5 回答
296 浏览

database - 是否有任何免费的数据库存储关键字和其他相关关键字,供应用程序确定语义相关性?

这看起来像是在寻找有价值的资产,但由于我们在很多事情上都有免费的替代品,所以我对此持乐观态度。

存储两个键值对的数据库,例如

核心价值

或者

键-上下文-值

对于收集数据并希望对其进行标记或搜索相关记录的 Web 开发人员来说,这将非常有用。

像这样的数据表甚至可以是他们想要存储的规范化形式。

如果您听说过这样的免费复制数据表,请分享。谢谢你。

0 投票
1 回答
868 浏览

java - 避免字典查找的高效 Lemmatizer

我想将'eat'之类的字符串转换为'eating','eats'。我搜索并找到了词形还原作为解决方案,但是我遇到的所有词形还原工具都使用词表或字典查找。是否有任何可以避免字典查找并提供高效率的词形还原器,可能是基于规则的词形还原器。是的,我不是在寻找“词干”。

0 投票
1 回答
346 浏览

search - 如何按相关性对搜索结果进行排序?

我正在研究一个搜索数据库的项目,然后根据用户输入的字符串按相关性对搜索结果进行排序。我认为我当前的搜索相当不错,但是我编写的按相关性对结果进行排序的比较器给了我有趣的结果。我不知道该考虑什么相关。我知道这是信息检索的一个重要分支,但我不知道从哪里开始查找按相关性对对象进行排序的搜索示例,并希望得到任何反馈。

为了提供更多关于我的具体问题的背景信息,用户将在网站数据库中输入一个字符串,该数据库存储具有各种字段的对象(商店中的项目),例如次要和主要分类(例如,XBox 360 游戏可能与major=video_games 和minor=xbox360 字段及其特定名称一起存储)。我认为在搜索中应该考虑的四个主要字段是对象类型的具体名称、主要、次要和流派,如果有帮助的话。

0 投票
1 回答
77 浏览

lucene - 在 Lucene 2.9 中按相关性对项目进行排序的问题

我们使用 Lucene.NET 2.9 版来使用自由文本查询来搜索项目。我们让 Lucene 按相关性自动对项目进行排序。除了一个奇怪的情况外,它一直运行良好。搜索Agile project management时,Lucene 返回的前 4 项如下。

  1. 傻瓜敏捷项目管理
  2. 敏捷项目管理的基础
  3. 敏捷项目管理
  4. 敏捷项目管理

项目 3 或 4 应该显示在顶部,因为它们是完美的。在我们搜索的许多情况下,如果一个项目匹配 100%,它就会显示在顶部。任何人都可以请解释这里发生了什么。我们正在使用标准分析仪。

0 投票
3 回答
10468 浏览

algorithm - 如何使用多因素加权排序提供最相关的结果

我需要提供 2+ 个因素的加权排序,按“相关性”排序。但是,这些因素并不是完全孤立的,因为我希望一个或多个因素影响其他因素的“紧迫性”(权重)。

示例:贡献的内容(文章)可以被向上/向下投票,因此具有评级;他们有一个发布日期,并且还带有类别标签。用户撰写文章并可以投票,并且他们自己可能有也可能没有某种排名(专家等)。可能类似于 StackOverflow,对吧?

我想为每个用户提供按标签分组但按“相关性”排序的文章列表,其中相关性是根据文章的评分和年龄计算的,并且可能受作者排名的影响。IE 几年前写的高排名文章可能不一定像昨天写的中等排名文章那样相关。也许如果一篇文章是由专家写的,它会被视为比“Joe Schmoe”写的更相关。

另一个很好的例子是为酒店分配一个由价格、评级和景点组成的“元分数”

我的问题是,多因素排序的最佳算法是什么?这可能是该问题的重复,但我对任何数量的因素(更合理的预期是 2-4 个因素)的通用算法感兴趣,最好是我不需要的“全自动”功能调整或要求用户输入,我无法解析线性代数和特征向量的古怪。


到目前为止我发现的可能性:

注:S是“排序分数”

  1. “线性加权” - 使用类似的函数:,其中是任意分配的权重,并且是因子的值。您还想规范化(即)。我认为这有点像Lucene 搜索的工作原理S = (w1 * F1) + (w2 * F2) + (w3 * F3)wxFxFFx_n = Fx / Fmax
  2. “Base-N weighted” - 更像是分组而不是加权,它只是一个线性加权,其中权重以 base-10 的倍数增加(与CSS 选择器特异性相似的原理),因此更重要的因素显着更高: .S = 1000 * F1 + 100 * F2 + 10 * F3 ...
  3. 估计真实价值(ETV) ——这显然是谷歌分析在他们的报告中引入的,其中一个因素的价值影响(权重)另一个因素——结果是对更“统计显着”的值进行排序。该链接很好地解释了它,所以这只是等式: ,其中“更重要”的因素(文章中的“跳出率”)是“显着性修改”因素(文章中的“访问”)。S = (F2 / F2_max * F1) + ((1 - (F2 / F2_max)) * F1_avg)F1F2
  4. 贝叶斯估计- 看起来与 ETV 非常相似,这就是 IMDb 计算其评级的方式。有关解释,请参阅此 StackOverflow 帖子;equation: ,其中与#3 相同,并且是“显着性”因子的最小阈值限制(即不应考虑小于 X 的任何值)。S = (F2 / (F2+F2_lim)) * F1 + (F2_lim / (F2+F2_lim)) × F1_avgFxF2_lim

选项 #3 或 #4 看起来很有希望,因为您不必像在 #1 和 #2 中那样选择任意加权方案,但问题是如何针对两个以上的因素进行此操作?

我还遇到了两因素加权算法的 SQL 实现,这基本上是我最终需要编写的。

0 投票
2 回答
1728 浏览

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

问题描述

我正在尝试实现一个自定义算法,以匹配用户提供的自由文本输入,一个公司名称,如“福特汽车”,与一个由 140 万个公司名称组成的参考数据源。

该算法执行以下步骤:

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

步骤 2)将搜索输入与参考公司名称进行逐个令牌匹配。

每个令牌都按以下顺序匹配:精确、开始、包含、Levenshtein 距离 (< 0.2) 和 Refined Soundex。

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

评分: 每个令牌匹配首先按照匹配技术评分的等级进行评分,精确匹配是最好的,Soundex 是最差的。

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

我的部分解决方案

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

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

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

问题:

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

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

感谢您阅读这个长问题。任何帮助/指针将不胜感激。

0 投票
4 回答
787 浏览

function - 抑制值的函数

我有一个文档列表,每个文档都有一个搜索查询的相关性分数。我需要较旧的文档来降低其相关性分数,以尝试在排名过程中引入它们的日期。我已经尝试过摆弄诸如 1/(1+date_difference) 之类的函数,但是倒数函数对于最近的日期来说太具有区分性了。

我在想可能是一个具有范围(0..1)和域(0..x)的数学函数来放大他们的分数,其中 x 轴是文档的年龄。最好通过图像解释我对该功能的进一步需求: