我试图通过使用一个Sphinx请求实现两个目标:获取与查询中的任何单词匹配的结果,并且首先具有完全匹配的结果。例如,如果我有歌曲搜索请求数据库:
和两个测试查询:
如果我搜索“麦莉赛勒斯”,我想得到第3行,如果我搜索“麦莉赛勒斯碎球”,我想得到#1或#2。我尝试了不同的匹配和排名模式的组合,但仍然无法在单个请求中实现。当我尝试SPH_MATCH_EXTENDED2和SPH_RANK_SPH04时,我的第一个测试查询可以很好地返回结果#3,但是第二个测试查询不返回结果。当我尝试SPH_MATCH_ANY时,我获得了第二个测试查询的部分匹配结果(#2的权重略高一点,这似乎是正确的),但是第一个查询返回3行,具有相同的权重,#1由于DB中的顺序而位于顶部。我现在唯一的解决办法是提出两个查询:一个是精确匹配,另一个是部分匹配,如果第一个查询失败了。
此外,从这个文章中,我看到除SPH_MATCH_EXTENDED2之外的所有匹配模式都是遗留模式,所以在删除部分匹配模式时,应该使用什么来进行部分匹配,如上面的示例所示?
发布于 2014-02-02 18:40:48
td;博士只有一种匹配模式-扩展。不使用任何其他的。如果要修改包含哪些文档,请修改查询本身(例如使用仲裁运算符)。然后可以选择如何使用排序模式排序文档。
首先要认识到的是,匹配和排名是两个截然不同的话题。
历史上,匹配和排名结合在一个概念中,您选择了teh匹配模式(它选择了查询的提取方式),并自动选择了合适的排序计算。
这意识到不够灵活,所以就分开了。但是很多人使用旧的行为方式,所以旧的匹配模式(任意/短语等)的维护是出于兼容性的原因。
在内部,只有一个匹配模式-扩展。旧的遗留匹配模式,根据需要自动重写查询(将其更改为扩展查询语法),并选择特定的排序模式。
因此,通过保持扩展匹配模式,您可以选择自己的排名模式。因此可以独立选择匹配(修改查询)或排序行为。
我解释了所有的背景故事,以向您展示,如果提供的匹配模式不够好,您可以做同样的事情。即
所以可以重写查询以使用仲裁,例如
"Miley Cyrus Wrecking Ball"/2记住保持扩展匹配模式。然后可以独立选择排名模式(setRankingMode) --比如现在可以使用SPH_RANK_SPH04,但是do得到“模糊”匹配行为(就像与任何匹配一样)。
..。别忘了尝试其他排名模式。
https://stackoverflow.com/questions/21497725
复制相似问题