Sqlite FTS确切的单词

时间:2015-01-07 10:26:37

标签: sqlite full-text-search match

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";

3 个答案:

答案 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结尾的术语。