我已经多次重温了这个问题,但我从未真正找到合适的答案。
是否可以执行MySQL搜索,以按相关性返回ACTUAL准确排序的结果?
我试图创建一个ajax搜索表单,当用户在输入字段中键入内容时提出建议,并且仅使用纯MySQL查询还没有找到合适的解决方案。我知道有可用的搜索服务器,例如ElasticSearch,我想知道如何仅使用原始MySQL查询来实现。
我有一张学校科目表。少于1200行,这将永远不会改变。让我们执行一个基本的FULLTEXT搜索,其中用户开始键入“ Bio”。
查询(“生物…”)-全文布尔模式
SELECT name, MATCH(name) AGAINST('bio*' IN BOOLEAN MODE) AS relevance
FROM subjects
WHERE MATCH(name) AGAINST('bio*' IN BOOLEAN MODE)
ORDER BY relevance DESC
LIMIT 10
结果
name | relevance
--------------------------------------------------------
Biomechanics, Biomaterials and Prosthetics | 1
Applied Biology | 1
Behavioural Biology | 1
Cell Biology | 1
Applied Cell Biology | 1
Developmental/Reproductive Biology | 1
Developmental Biology | 1
Reproductive Biology | 1
Environmental Biology | 1
Marine/Freshwater Biology | 1
为了显示这些结果有多糟糕,下面是一个简单LIKE
查询的比较,该查询显示了所有未显示的更相关的结果:
查询(“生物…”)-喜欢
SELECT id, name
WHERE name LIKE 'bio%'
ORDER BY name
结果
name | relevance
--------------------------------------------------------
Bio-organic Chemistry | 1
Biochemical Engineering | 1
Biodiversity | 1
Bioengineering | 1
Biogeography | 1
Biological Chemistry | 1
Biological Sciences | 1
Biology | 1
Biomechanics, Biomaterials and Prosthetics | 1
Biometry | 1
而且您已经看到没有建议多少主题,即使这些主题更可能是用户要寻找的主题。
LIKE
但是,使用的问题是如何像在跨字词中那样在多个字词之间进行搜索FULLTEXT
。
我想要实现的基本排序如下:
所以我的问题是,如何通过多个单词的MySQL搜索为用户获得合理排序的建议列表?
您可以使用字符串函数,例如:
select id, name
from subjects
where name like concat('%', @search, '%')
order by
name like concat(@search, '%') desc,
ifnull(nullif(instr(name, concat(' ', @search)), 0), 99999),
ifnull(nullif(instr(name, @search), 0), 99999),
name;
这将使您获得所有包含@search的条目。首先是那些在开始处具有它的对象,然后是那些在空白处具有它的对象,然后是出现位置,然后是字母顺序。
name like concat(@search, '%') desc
顺便说一下,使用MySQL的布尔逻辑。1 = true,0 =
false,因此按降序排列将使您先获得true。
SQL提琴:http ://sqlfiddle.com/#!9/
c6321a/1
我正在构建/训练Tesseract从捕获的照片中识别护照MRZ代码。在将照片/图像发送到Tesseract引擎之前,我将应用以下图像预处理技术: 二值化 正常化 取样 去噪 细化(可选) 此外,我已经用正确的字体(OCR-B)训练了Tesseract引擎,方法是创建大量的框文件(来自大约35个示例,其中包含从OCR-B字体的文本示例中获取的照片),修复框文件中的任何错误,创建训练文件,最后用我的所
首先,对不起我的英语不好! 我是Lucene图书馆的新人(从上周三开始),我试图了解如何根据找到的术语获得匹配文档的最佳相关性级别。 我使用Lucene 4.10。0(无Solr) 我能够索引/搜索英语/阿拉伯语文本,以及支持这些文本的点击突出显示。 现在我有一个问题与搜索结果的相关性。 如果我在三个文档中搜索“穆罕默德·奥马尔”: 我得到同样的分数为这3文档。 看起来Lucene忽略了单词顺序,
问题内容: 我对MYSQL相对较新,遇到了困扰我一段时间的问题。我已经尝试在所有地方使用Google搜索来寻找答案,但到目前为止仍无法找到可接受的解决方案。 这是我当前正在运行的查询,用于查找给定搜索词的最佳匹配项: 它返回的结果是全面的,因为它们包括所有相关的行。但是,它们没有按照任何特定的顺序排序,我希望在用PHP打印结果时首先显示完全匹配的匹配项。像这样: 1 | 字<精确匹配 2 | 填字
所以我试图在搜索一个名字后,点击该表,然后在其他表中编辑它,问题是我没有得到正确的id,而是只得到了前面的id。 JTable 行动中的搜索 Id错误 编辑代码 搜索代码
在Elasticsearch中,您可以执行返回点击的搜索,同时在一个响应中返回与点击分开的聚合结果。这是非常强大和有效的,因为您可以运行查询和多个聚合,并一次获得两个(或其中一个)操作的结果,避免使用简洁和简化的API进行网络往返。 我想执行搜索,当我对聚合有查询时返回点击。但我不确定如何才能做到以上几点? 我正在使用以下查询:
怎么搜索我的数据? 怎么使用周边搜索? 怎么高级筛选来找相关数据?