作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为网络应用程序设置文本搜索。我的 mysql 查询如下:
SELECT * FROM t1 WHERE MATCH (c1,c2,c3) AGAINST (:keyStr IN BOOLEAN MODE)
我希望匹配 :keyStr 中的所有单词,所以 keyStr 看起来像:
:keyStr='+word[0]* +word[1]* +word[2]* + ... +word[n]*'
如果任何词 [x] 是停用词或小于最小词长,则查询返回空值。我认为最好的解决方案是从停用词中删除“+”或从 :keyStr 中完全删除停用词。
请问有什么好的方法吗?在进行查询之前,我是否需要检查 stopwords_list 中是否有任何词[x]?
最佳答案
使用 javascript 实现此目的的一种简单方法是:
var apart = "Some +example search that I made up".toLowerCase().replace(/[\+\-\?]*/g, '').split(' '),
stop_words = ['the', 'that', 'a', 'example'],
min_word_length = 1;
// filter the array to remove stop words
apart.filter( function( item ) {
if ( item.length < min_word_length ) return false;
return stop_words.indexOf( item ) === -1;
});
编辑:虽然在伪代码意义上,上面的代码可以工作,这里是一个 PHP 解决方案
$query = "This is my example search query";
$search = explode(' ', $query);
$stop_words = array('is', 'a', 'the');
$terms = array_filter($search, function($item){
return !in_array($item, $stop_words);
});
$formatted = array_map(function($term){
return '+'.mysql_escape_string($term).'*';
}, $terms);
// :keyStr = implode(' ', $formatted);
关于php - 如何在进行mysql查询之前识别停用词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15043592/
我是一名优秀的程序员,十分优秀!