如何在mySql中的完整索引搜索中传递select语句值?

时间:2012-01-10 03:31:33

标签: php mysql expressionengine

我想在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语句来提取标题和正文。我得到了结果,但不知怎的,我的停止关键字无法识别。

1 个答案:

答案 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索引。


全文搜索中会忽略某些字词:

  • 任何太短的单词都会被忽略。全文搜索找到的默认最小单词长度为四个字符。
  • 停用词列表中的单词将被忽略。禁用词是诸如“the”或“some”之类的词,它是如此常见以至于它被认为具有零语义值。有一个内置的禁用词列表,但它可以被用户定义的列表覆盖。

可以在MySQL文档的11.9.4. Full-Text Stopwords中查看默认停用词列表。

相关问题