首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >狮身人面像精确/部分匹配和排名

狮身人面像精确/部分匹配和排名
EN

Stack Overflow用户
提问于 2014-02-01 11:58:40
回答 1查看 1.2K关注 0票数 0

我试图通过使用一个Sphinx请求实现两个目标:获取与查询中的任何单词匹配的结果,并且首先具有完全匹配的结果。例如,如果我有歌曲搜索请求数据库:

  1. 麦莉赛勒斯球
  2. 麦莉塞勒斯角
  3. 麦莉·赛勒斯

和两个测试查询:

  1. 麦莉·赛勒斯
  2. 麦莉赛勒斯剥皮球

如果我搜索“麦莉赛勒斯”,我想得到第3行,如果我搜索“麦莉赛勒斯碎球”,我想得到#1或#2。我尝试了不同的匹配和排名模式的组合,但仍然无法在单个请求中实现。当我尝试SPH_MATCH_EXTENDED2SPH_RANK_SPH04时,我的第一个测试查询可以很好地返回结果#3,但是第二个测试查询不返回结果。当我尝试SPH_MATCH_ANY时,我获得了第二个测试查询的部分匹配结果(#2的权重略高一点,这似乎是正确的),但是第一个查询返回3行,具有相同的权重,#1由于DB中的顺序而位于顶部。我现在唯一的解决办法是提出两个查询:一个是精确匹配,另一个是部分匹配,如果第一个查询失败了。

此外,从这个文章中,我看到除SPH_MATCH_EXTENDED2之外的所有匹配模式都是遗留模式,所以在删除部分匹配模式时,应该使用什么来进行部分匹配,如上面的示例所示?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-02 18:40:48

td;博士只有一种匹配模式-扩展。不使用任何其他的。如果要修改包含哪些文档,请修改查询本身(例如使用仲裁运算符)。然后可以选择如何使用排序模式排序文档。

首先要认识到的是,匹配和排名是两个截然不同的话题。

  • 匹配是什么文档甚至显示结果,即比较查询和回答是/否的问题“这个文档匹配查询吗?”
  • 排名是计算一个权重,所以最好的匹配可以上升到顶端,通过排序的权重。

历史上,匹配和排名结合在一个概念中,您选择了teh匹配模式(它选择了查询的提取方式),并自动选择了合适的排序计算。

这意识到不够灵活,所以就分开了。但是很多人使用旧的行为方式,所以旧的匹配模式(任意/短语等)的维护是出于兼容性的原因。

在内部,只有一个匹配模式-扩展。旧的遗留匹配模式,根据需要自动重写查询(将其更改为扩展查询语法),并选择特定的排序模式。

因此,通过保持扩展匹配模式,您可以选择自己的排名模式。因此可以独立选择匹配(修改查询)或排序行为。

我解释了所有的背景故事,以向您展示,如果提供的匹配模式不够好,您可以做同样的事情。即

  • 您需要选择特定的排名模式(甚至是通过排名表达式选择完全自定义的模式)。
  • 您很可能需要修改查询本身,以更改匹配行为。(请记住选择MATCH_ANY,更改查询并选择排序模式。)

所以可以重写查询以使用仲裁,例如

代码语言:javascript
复制
"Miley Cyrus Wrecking Ball"/2

记住保持扩展匹配模式。然后可以独立选择排名模式(setRankingMode) --比如现在可以使用SPH_RANK_SPH04,但是do得到“模糊”匹配行为(就像与任何匹配一样)。

..。别忘了尝试其他排名模式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21497725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档