Оператор SELECT не возвращает результатов в iOS 8.2 (SQL 3.8.4)

Приведенный ниже оператор SELECT отлично работал в iOS 8.1 и более ранних версиях. Теперь на моем обновленном устройстве с iOS 8.2 он просто не возвращает никаких результатов без каких-либо ошибок. Я выяснил, что iOS 8.2 обновила версию SQLite с 3.7.13 до 3.8.4. Кажется, это проблема, потому что я больше ничего не менял.

SELECT * FROM allLanguages WHERE allLanguages MATCH '*searchString*' (doesn't work --> no results)

Когда я немного поиграл, кажется, что проблема заключается в «префиксном» подстановочном знаке *. Удаление этого возвращает результаты.

SELECT * FROM allLanguages WHERE allLanguages MATCH 'searchString*' (works)

SELECT * FROM allLanguages WHERE allLanguages MATCH '*searchString' (doesn't work --> no results)

SELECT * FROM allLanguages WHERE allLanguages MATCH '*searchString*' (doesn't work --> no results)

Кто-нибудь знает, в чем здесь проблема? И можно ли заменить оператор SELECT другим, который работает в SQL 3.8.4?

Спасибо заранее!


person riik    schedule 18.03.2015    source источник


Ответы (1)


После некоторых исследований, заключающих в двойные кавычки '"*searchString*"', мне помогло. Не могу объяснить, почему, но это работает ;)

SELECT * FROM allLanguages WHERE allLanguages MATCH '"*searchString*"'
person riik    schedule 18.03.2015
comment
У меня та же проблема, но ваше решение кажется не идеальным: оно возвращает только те языки совпадающих текстов, которые НАЧИНАЮТСЯ с «searchString». Это правильно? - person barrast; 18.03.2015
comment
Окружение searchString начальным * и конечным * также возвращает результаты, в которых searchString встречается в произвольной позиции, а не только в начале. Это то, что я испытываю. Вы пробовали это с начальным * И конечным *? - person riik; 18.03.2015
comment
К вашему сведению: если вы используете этот оператор в контексте NSString в Objective C, вы должны избегать двойных кавычек с помощью \. Например. NSString *query = @SELECT * FROM allLanguages ​​WHERE allLanguages ​​MATCH '\*searchString*\'; Это может помочь. - person riik; 18.03.2015
comment
Конечно, это именно то, что я использую, с экранированными двойными кавычками, но он возвращает только те записи, которые начинаются с моего исследовательского текста... До обновления iOS он работал правильно и возвращал все вхождения, всякий раз, когда текст поиска был на в начале или в конце... Это очень натянутое поведение. - person barrast; 18.03.2015
comment
Я сожалею, что ввел вас в заблуждение. Ты был прав. Он соответствует только словам, начинающимся с searchString. Я имел в виду соответствие слов в середине предложения. например если вы ищете развлечения, это будет соответствовать этому фантастическому бару. После некоторых исследований выяснилось, что ведущие астерики не будут работать на fts, работающем с MATCH. - person riik; 19.03.2015
comment
Я создаю решение для своего приложения на основе этого github.com/haifengkao/SqliteSubstringSearch прямо сейчас. С помощью пользовательского токенизатора это также позволит вам сопоставлять подстроки в словах в произвольной позиции. Может помочь и вам. - person riik; 19.03.2015