我想用变音器进行全文搜索。一切正常。我有4个字段,即。
ID |Category | Type |Title |Meta
1 |Vehicle |4 Wheelers |Farrari Car for Sale |FHKL WLRS FRR KR FR SL
2 |Real Estate |Residential Apt|3BHK for sale |RL ESTT RSTN APT BK FR SL
3 |Music |Instruments |Piano for sale |MSK INST PN FR SL
4 |Stationary |College |Bag for $50 |STXN KLJ BK FR
5 |Services |Job |Vacancy for Jr.Web Developer |SRFS JB FKNS FR JRWB TFLP
以上是示例数据。在这里,我想使用metaphone和match()against()进行全文搜索。一切正常。但是,诸如Bag,Job和Car之类的某些单词会被忽略为默认的最小字符4。问题是,现在我使用共享托管,托管提供商告诉我他无法向我提供mysql配置文件,也无法更改此设置这在配置文件中ft_min_word_len = 2
不是一个选择。
//Code for generating metaphone
<?php
$string = "Vacancy for Jr.Web Developer";
$a = explode(" ", $string);
foreach ($a as $value) {
echo metaphone($value,4)."<br>";
}
?>
我使用正常
SELECT * FROM tbl_sc WHERE MATCH(META) AGAINST('$USER_SEARCH');
数据库中的所有信息都是用户生成的,因此我无法进行监督。由于我使用mysql,PHP和共享主机。我不能使用任何弹性搜索库或类似Solr之类的东西。我已经搜索了谷歌,并且堆栈溢出,但是我什么也没得到
一个选项使用LIKE运算符,但如果可能,我想使用MATCH()AGAINST()。
请帮助我解决一些替代方法。
首先,三种类型的全文本搜索自然语言全文搜索布尔全文搜索查询扩展搜索
这里最适合您的问题是自然语言全文搜索,因为您的查询大多使用自由语言,并且不使用特殊字符。语法如下:]
SELECT * FROM table_name WHERE MATCH(col1, col2) AGAINST('search terms' IN NATURAL LANGUAGE MODE)
在您的情况下,首先将全文功能添加到表中
$stmt_txt_search = $conn->prepare("ALTER TABLE tbl_sc ADD FULLTEXT (Category, Type, Title, Meta)"); $stmt_txt_search->execute();
您的查询应该是这样的
$stmt_match = $conn->prepare("SELECT * FROM articles WHERE MATCH (Meta) AGAINST(? IN NATURAL LANGUAGE MODE)");
$stmt_match->bind_param("s",$USER_SEARCH);
$stmt_match->execute();