首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mysql上进行自定义全文检索(制作索引文件)

问在mysql上进行自定义全文检索(制作索引文件)
EN

Stack Overflow用户
提问于 2011-04-19 18:47:25
回答 3查看 2.3K关注 0票数 1

我想做我自己的自定义全文搜索,但我不确定什么是最好的方法来制作索引表。

好的,我从文本字段中提取出所有长度大于3的单词到索引表中。但是我需要存储关于它们的什么呢?word,我正在搜索的表的ID?还要别的吗?单词出现的频率是多少?

和支持问题:如何将文本字段拆分成单词,有没有mysql函数,或者我应该使用服务器端语言来做这件事?

更新:为了让事情更清楚:我不需要全文搜索,只需要我的文本字段中所有记录中的单词的单词列表,这样我就可以用LIKE 'word%‘搜索结尾

EN

回答 3

Stack Overflow用户

发布于 2011-04-19 19:10:36

如果您只打算实现MySQL所称的boolean mode (无相关性计数),则应实现以下基本功能:

  1. A wordbreaker,一种将字符串拆分成单词的算法。这在英语中是微不足道的,但对于一些亚洲语言来说,这可能是一个问题,因为这些语言不使用words.
  2. Optionally,a went之间的空格,这是一种将单词简化为基本形式的算法,因此gone和spellchecker都变成了thesaurus a

,这是一种纠正常见拼写的算法errors.

  1. Optionally,a spellchecker,它将同义词减少为它们的常见形式。

所有这一切的结果就是你得到了一个类似这样的字符串:

代码语言:javascript
复制
a fast oburn vixen jmups over an indolent canine

拆分成单词的基本形式,替换同义词并更正错误:

代码语言:javascript
复制
quick
brown
fox
jump
over
lazy
dog

然后,您只需在(word, rowid)上创建一个复合索引,其中word是基本形式,rowid是所索引记录的PRIMARY KEY。

例如,要查询'+quick +fox',您应该在索引中搜索这些单词,并在rowid上找到一个交叉点。相交的rowid将包含这两个单词。

如果你打算考虑相关性,你应该另外在一个单独的索引中维护整个语料库的每个单词的统计数据。

我应该警告你,这不是一项简单的任务。看看Sphinx的源代码就知道了。

票数 4
EN

Stack Overflow用户

发布于 2011-04-19 19:01:27

不要这样做

除非你知道你在做什么,否则忘了滚动你自己的全文搜索吧。

让MySQL来做繁重的工作。

  1. 将MyISAM用于要搜索的表
  2. 将FULLTEXT索引放在要索引的文本字段上。

那就这么做

代码语言:javascript
复制
SELECT *, MATCH(field1, field2) AGAINST 'text to search' 
  IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION AS relevancy 
FROM table1 
WHERE MATCH(field1, field2) AGAINST 'text to search' 
  IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
ORDER BY relevancy

请参阅:http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html#function_match

票数 2
EN

Stack Overflow用户

发布于 2011-04-19 20:27:24

OP表示他想搜索单词结尾。

我住的地方(荷兰)我们在12月份写诗,所以我做了很多单词结尾的搜索,以找到ryhme的单词。

这是我的诀窍。

将名为visa_versa: varchar indexed的新字段添加到表中

代码语言:javascript
复制
UPDATE mytable SET mytable.visa_versa = REVERSE(mytable.myword);

现在您可以使用以下命令对单词结尾进行索引搜索

代码语言:javascript
复制
SET @ending = 'end';
SELECT myword FROM mytable where visa_versa LIKE REVERSE(CONCAT('%',@ending)); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5715191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档