在sqlite中计算文本匹配

时间:2012-03-05 09:34:02

标签: android sql sqlite

我正在查询表中的几个列中的某些单词(基本上查询m个文本列是否包含用户输入的n个术语),我想根据发生的匹配数对这些行进行排名。 所以我有类似这样的查询:

SELECT *, (COLUMN1 LIKE '%TERM1%') + (COLUMN1 LIKE '%TERM2%') + ... + (COLUMN1 LIKE '%TERMN%') + (COLUMN2 LIKE '%TERM1%') + ... + (COLUMNM LIKE '%TERMN%') AS SCORE 
FROM TABLE_NAME 
WHERE COLUMN1 LIKE '%TERM1%' OR ... OR COLUMNM LIKE '%TERMN%' 
ORDER BY SCORE DESC LIMIT 200;

但是这个查询似乎并不常用,有时所有结果似乎都得分为0,即使有匹配也是如此。谁能提出问题是什么?我怀疑它可能与LIKE运算符的结果类型和得分列的类型有关。

此外,是否有更好的方法可以在不生成详细查询的情况下执行相同的操作?

1 个答案:

答案 0 :(得分:0)

是的,使用代码的另一种方式是 试试这个

long cnt = countdata("COLUMN1 LIKE %TERM1%")

public Long countdata(String whereClause) {
        long count = 0;
        Cursor c = mDb.rawQuery("SELECT count(*) FROM TABLENAME WHERE " + whereClause, null);
        int numRows = c.getCount();
        c.moveToFirst();
        for (int i = 0; i < numRows; ++i) {
            Log.i("Count", c.getString(0));
            count = c.getLong(0);
            c.moveToNext();
        }
        c.close();
        return Long.valueOf(count);
    }