在mysql上进行自定义全文本搜索(创建索引文件)

|| 我想进行自己的自定义全文搜索,但是我不确定哪种方法可以最好地创建索引表。 好的,我将文本字段提取出来,并将所有大于3的单词提取到索引表中。但是我必须存储什么呢?单词,我要搜索的表的ID?还要别的吗?词频? 和支持的问题:如何将文本字段拆分为单词,是否有任何mysql函数,还是应该使用服务器端语言来实现? 更新:为了使事情变得清楚:我不需要全文搜索,只需搜索文本字段所有记录中的单词的单词列表,因此我可以用LIKE \'word%\'搜索结尾
已邀请:
如果仅要实现
MySQL
称为
boolean mode
(不进行相关计数),则应实现以下基本功能:
wordbreaker
,一种将字符串拆分为单词的算法。这在英语中是微不足道的,但是对于某些在单词之间不使用空格的亚洲语言来说可能是个问题。 可选地,一个“ 3”算法,该算法将单词还原为基本形式,从而使“ 4”和“ 5”都变为“ 6”。 可选地,一种“ 7”算法,用于纠正常见的拼写错误。 可选地,一个“ 8”,它将同义词简化为它们的常见形式。 所有这些的结果是您拥有一个像这样的字符串:
a fast oburn vixen jmups over an indolent canine
分解为单词的基本形式,并替换了同义词并纠正了错误:
quick
brown
fox
jump
over
lazy
dog
然后,您只需在
(word, rowid)
上创建一个复合索引,其中
word
是基本形式,而
rowid
是所索引记录的
PRIMARY KEY
。 要查询
\'+quick +fox\'
,您应该在索引中搜索这些单词并在
rowid
上找到一个交集。相交的“ 13”将包含两个单词。 如果要考虑相关性,则还应该在整个语料库的单独索引中维护每个单词的统计信息。 我应该警告您,这不是一个简单的任务。只需看一下
Sphinx
源代码。
不要做 除非您知道自己在做什么,否则请忘记滚动自己的全文本搜索。 让MySQL做繁重的工作。 使用MyISAM作为您要搜索的表 在要索引的文本字段上放置一个“ 19”索引。 然后做
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
OP表示他想搜索词尾。 我住在的地方(荷兰)我们在12月写诗,所以我做了很多单词结尾搜索以寻找黑韵的单词。 这是我的把戏。 向您的表添加一个名为“ 21”的新字段
UPDATE mytable SET mytable.visa_versa = REVERSE(mytable.myword);
现在,您可以使用
SET @ending = \'end\';
SELECT myword FROM mytable where visa_versa LIKE REVERSE(CONCAT(\'%\',@ending)); 

要回复问题请先登录注册