1
94
创建三个全文索引
然后,您的查询:
关键是
但是,在实际搜索中,您没有使用这两个索引中的任何一个。为此,使用第三个索引,它位于两列上。 (关键字、内容)上的索引控制您的召回。阿卡,返回的是什么。
请注意,您可以使用任意数量的不同索引(或者,根据其他因素改变您在查询时使用的索引和权重,可能……如果查询包含停止词,则仅搜索关键字……如果查询包含3个以上的词,则减少关键字的权重偏差……等等)。 每个索引都会占用磁盘空间,所以索引越多,磁盘就越多。反过来,mysql的内存占用也更大。此外,插入将花费更长的时间,因为您有更多的索引要更新。 您应该根据您的情况对性能进行基准测试(小心关闭mysql查询缓存以进行基准测试,否则您的结果将出现偏差)。这不是谷歌分级的效率,但它非常简单,而且“开箱即用”,而且几乎可以肯定比在查询中使用“like”要好得多。
|
2
19
实际上,使用case语句生成一对标志可能是更好的解决方案:
同样,只有当所有关键字匹配的排名高于所有仅内容匹配的排名时,才会出现这种情况。我还假设关键字和内容的匹配是最高排名。 |
3
7
这将根据
|
4
0
请不要在这里使用任何劣质的SQL,我已经好几年没有编写任何SQL了,我正在做这件事。。。
J.Js |
5
0
在布尔模式下,MySQL支持“>”和“<”运算符更改单词对指定给行的相关性值的贡献。 我想知道像这样的事情会不会奏效?
|
6
-1
据我所知,MySQL全文搜索不支持这一点,但您可以通过在关键字字段中多次重复该单词来实现这一效果。 用“foo-bar foo-bar foo-bar foo-bar”代替关键字“foo-bar”,这样一来,foo和bar在关键字列中都同等重要,而且由于它们出现了多次,因此与mysql的关系变得更加密切。 我们在我们的网站上使用它,它是有效的。 |
7
-1
那要看你到底是什么意思了:
如果您的意思是关键字中包含foo的行应该出现 之前 任何 |
8
-1
我需要类似的东西,并使用OP的解决方案,但我注意到全文与部分单词不匹配。因此,如果“西瓜”作为单词的一部分出现在关键字或内容中(如watermelonsalesmanager),则它不匹配,并且由于WHERE匹配而不包含在结果中。 所以我做了一点傻事,将OP的查询调整为:
希望这有帮助。 |
9
-4
如果度量标准只是所有关键字匹配比所有内容匹配更“有价值”,那么您可以使用具有行计数的并集。沿着这条线的东西。
对于任何比这更复杂的事情,如果你想对每一行应用一个实际的权重,我不知道如何帮助你。 |
AVEbrahimi · SQLITE FTS匹配中文本出现的真实次数 6 年前 |
Bob · 在何处存储搜索索引的数据? 6 年前 |
Fabio B. · 如何在Solr中排序/增强产品搜索结果 6 年前 |
Santhosh · Django全文搜索:表示不存在uncent 6 年前 |
IvanKaminskyi · Algolia搜索关键字 7 年前 |
Oleg · 查询集群中单个ElasticSearch节点 7 年前 |