SELECT * FROM my_table WHERE product MATCH "apple";
返回:苹果,青苹果,苹果酱...... 我需要只返回" apple"的FTS查询。 这些工作很慢:
SELECT * FROM my_table WHERE product="apple";
SELECT * FROM my_table WHERE product LIKE "apple";
答案 0 :(得分:1)
使用FTS表,唯一有效的查询是使用MATCH搜索。
使用FTS4,您可以使用^
将搜索限制在文档的开头:
SELECT * FROM my_table WHERE product MATCH '^apple';
然而,这对最终没有帮助。
要对整列进行有效检查,请先进行FTS搜索,然后检查结果:
SELECT *
FROM (SELECT product
FROM my_table
WHERE product MATCH '^apple')
WHERE product = 'apple';
答案 1 :(得分:0)
FTS(全文搜索)的目的是找到所有完全匹配和部分匹配。当您搜索“apple”时,预计会找到 apple、green apple、apple jam、apple11、apple123(所有以“apple”开头的单词或包含整个单词“apple”的短语)。
如果您想进一步缩小结果范围,您可以将结果保存在 db 端的临时表中,并在临时表中搜索精确匹配。或者您也可以在客户端完成这项工作:
DataTable dt = dbHelper.GetProducts(params);
string exactProductName = "apple";
// delete products from the table which are not an exact match
for (int i = dt.Rows.Count - 1; i >= 0; i--)
{
DataRow dr = dt.Rows[i];
if (dr["product"].ToString() != exactProductName )
dr.Delete();
}
dt.AcceptChanges();
// now your data table includes only the exact match
答案 2 :(得分:-1)
像这样更改sql
SELECT *
FROM my_table
WHERE product MATCH '^apple$'
这个sql意味着找到以apple开头并以apple结尾的术语。