我想在select body from articles
参数列表中将database
结果集而不是AGAINST
作为关键字传递。我怎样才能做到这一点?。我想根据表格中匹配的关键字找到相关文章。
SELECT * FROM articles
WHERE MATCH (title,body)
AGAINST ('database' IN NATURAL LANGUAGE MODE);
我想这样做:
SELECT * FROM articles
WHERE MATCH (title,body)
AGAINST ("select title,body from articles" IN NATURAL LANGUAGE MODE);
从comment编辑:
我想根据文章频道中匹配关键字的密度来获取相关文章。我创建了FULLTEXT
索引,我的表格是ISAM格式。目前,文章频道包含字幕和正文自定义字段。由于所有内容都必须是动态的,因此我无法在AGAINST('Lorem Manager')
内传递关键字,因为我们在访问下一篇新闻文章时不知道关键字是什么,所以我嵌入了select语句来提取标题和正文。我得到了结果,但不知怎的,我的停止关键字无法识别。
答案 0 :(得分:1)
你到底希望实现什么目标?
为了更好地理解 - ,或许可以说明 - 你要求的是什么,让我们用ExpressionEngine用语来讨论中的内容,毕竟这就是你用问题标记的内容。< / p>
使用Agile Records ExpressionEngine网站主题,让我们使用关于频道中的两个字段 - 正文和职员的标题:
<强>车身强>
自定义字段:{about_body}
MySQL专栏:field_id_4
职员名称
自定义字段:{about_staff_title}
MySQL专栏:field_id_6
首先,如果您还没有,则需要create a single FULLTEXT index包含您正在搜索的所有列。
使用上面的两列,从phpMyAdmin或您最喜欢的MySQL GUI客户端执行以下SQL语句:
CREATE FULLTEXT INDEX related_articles
ON exp_channel_data (field_id_4, field_id_6);
您可以使用以下查询验证新创建的INDEX:
SHOW INDEX FROM exp_channel_data;
要针对文本集合(一个或多个数据库列)执行字符串(关键字)的自然语言搜索,请考虑以下内容...其中 Lorem 和 Manager 是您的关键字:
SELECT * FROM exp_channel_data
WHERE MATCH (field_id_4, field_id_6)
AGAINST ('Lorem Manager' IN NATURAL LANGUAGE MODE);
将返回如下结果集(为便于阅读而简化):
+----------+-------------+------------------------+
| entry_id | field_id_4 | field_id_6 |
+----------+-------------+------------------------+
| 3 | Lorem ipsum | |
| 8 | | Product Manager |
| 4 | | Co-Owner/Label Manager |
+----------+-------------+------------------------+
使用自然语言全文搜索时,要求MATCH()函数中命名的列与表中某些FULLTEXT索引中包含的列相同。
例如,在前面的示例中,请注意MATCH()函数中指定的列( field_id_4 和 field_id_6 )与定义中的列相同。文章表的FULLTEXT索引。
如果您想单独搜索列,则需要为每列创建单独的FULLTEXT索引。
全文搜索中会忽略某些字词:
可以在MySQL文档的11.9.4. Full-Text Stopwords中查看默认停用词列表。