2017-01-20 3 views
3

В настоящее время я пытаюсь выполнить запрос FTS5 через libsqlite и должен ограничивать запрос определенным столбцом. В FTS4, это было возможно, выполнив:Как ограничить весь запрос FTS5 одним столбцом?

SELECT foo, bar FROM tableName WHERE columnName MATCH ?

, а затем связывание строку поиска в заявлении. Однако с FTS5 LHS оператора MATCH должен быть именем самой таблицы FTS, а имя столбца должно быть частью запроса:

SELECT foo, bar FROM tableName WHERE tableName MATCH 'columnName:' || ?.

Это работает, когда строка bind ed является одной фразой. Однако рассмотрите текст поиска this is great. Запрос становится:

SELECT foo, bar FROM tableName WHERE tableName MATCH 'columnName:pizza is great';

Только pizza ограничивается в columnName, но остальная часть фразы согласована со всеми столбцами.

Как я могу обойти это?

+1

'это great' не фраза, это три фразы. –

+0

CL., Спасибо, отредактирован, чтобы называть его «текст поиска» – caughtinflux

+0

Вы хотите, чтобы текст поиска представлял собой одну фразу или три фразы? –

ответ

1

documentation говорит:

Одна фраза ... может быть ограничено соответствие текст в заданном столбце таблицы FTS, предваряя его с именем столбца, за которым следует двоеточие.

Таким образом, имя столбца применяется только к одной фразе. Если у вас есть три фразы, вам нужно указать имя столбца трижды:

tableName MATCH 'columnName:pizza columnName:is columnName:great' 
+0

Недавно я столкнулся с этой проблемой и понял, что это решение не реально, когда вы не знаете формат текста поиска. – caughtinflux

Смежные вопросы