Подсчет совпадений текста в sqlite - PullRequest
1 голос
/ 05 марта 2012

Я запрашиваю несколько столбцов в таблице для некоторых слов (по сути, запрашиваю 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 голосов
/ 05 марта 2012

да, есть другой способ использования кода
попробуйте это

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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...