我目前正在使用
MATCH column_name AGAINST ( 'search_term' IN NATURAL LANGUAGE MODE);
其中column_name
是全文索引的。这适用于大多数情况,但如果用户搜索"items"
,我希望它从数据库中返回"short string items"
和"short string item's"
(假设两者都存在)。目前它正在搜索的方式将撇号视为一个字母,而不是像空格一样的单词。我看到一些建议,我创建了另一列基本上搜索友好的术语,在这种情况下我可以删除撇号,但我想知道是否有更好的方法,例如调整整理以不同的方式处理撇号?
答案 0 :(得分:0)
我最终实现的解决方案首先在自然语言模式下搜索全文索引列,然后使用REPLACE和LIKE搜索搜索列:
export class showClassComponent {
var classes = [ { name: 'workBookEntity', value: new WorkBookEntity() }]
whenSubmitedInHtmlForm(className: string): void {
let c = classes.filter(class => class.name == className)[0];
if(c) {
let ret = [];
for (var key in c) {
if (c.hasOwnProperty(key)) {
ret.push({ name: key, value: c[key] });
}
}
return ret;
}
}
// more code there
}
这似乎返回了我正在寻找的正确结果。
例如,如果用户搜索SELECT
*
FROM
table
WHERE
MATCH column_name AGAINST ("search_term" IN NATURAL LANGUAGE MODE)
OR REPLACE (column_name, "'", "") LIKE "%search_term%";
,"items"
,"item's"
或"string items"
,则应同时返回"string items"
和"short string item's"
(再次假设存在于DB中。