Intereting Posts
Глобальная переменная / константа в действии Данные остаются в локальном хранилище данных после открепления Лучшая практика: передача объектов между действиями Android Localhost работает на Mac. Могу ли я просмотреть его на своем Android-телефоне? Поддерживает ли Android поддержку нескольких языков? Покупки в приложении, сделанные с помощью промо-кодов, возвращают пустую строку полезной нагрузки разработчика Анимация ObjectAnimator LinearLayout width Android WebViewClient onReceivedError не вызывается для ошибки 404 Камера Android заблокирована после закрытия силы Лучший способ получить весь текст в EditText из InputConnection? Замена для ItemizedOverlay в Google maps V2 для Android? Как использовать инструмент AIDL из командной строки с использованием кода примера SDK? Как сделать запрос на мыло, используя библиотеку Volley в Android Android adb возвращает ошибку «устройство не найдено» Adb shell dumpsys meminfo – В чем смысл каждой ячейки его вывода?

Поиск в нескольких столбцах с использованием полнотекстового поиска (FTS) с несколькими токенами с использованием оператора OR

Я использую FTS для запроса моей базы данных для увеличения скорости поиска, так как мне нужно также искать в текстовом описании,

Когда я пытаюсь выполнить запрос с использованием одного столбца, он работает нормально, как показано ниже.

select * from productsearch where productsearch match ('prod_name:panasonic*tw*') 

А также,

 select * from productsearch where productsearch match ('prod_short_desc:samsung*s5*') 

Таким образом, выше обоих запросов дают мне ожидаемый результат, но когда я пытаюсь совместить оба запроса с помощью оператора OR он не дает мне никакого результата

 select * from productsearch where productsearch match ('prod_name:panasonic*tw* OR prod_short_desc:samsung*s5*') 

Итак, я хочу знать, если я делаю что-то неправильно здесь, используя оператор OR для поиска нескольких столбцов

ОБНОВИТЬ

Ниже запрос работает нормально, но это не соответствует моему требованию,

 select * from productsearch where productsearch match ('prod_name:panasonic* OR prod_short_desc:samsung*') 

Вы можете видеть, что если я удалю несколько токенов, то это будет нормально работать с оператором OR .

Solutions Collecting From Web of "Поиск в нескольких столбцах с использованием полнотекстового поиска (FTS) с несколькими токенами с использованием оператора OR"

SQLite FTS поддерживает только простые поисковые запросы.

Запрос типа prod_short_desc:samsung*s5* состоит из двух выражений prod_short_desc:samsung* и s5* , которые ведут себя точно так же, как если бы вы написали prod_short_desc:samsung* s5* .

Если вы скомпилировали SQLite для синтаксиса расширенного запроса, вы можете использовать такой запрос, как:

 prod_short_desc:samsung* prod_short_desc:s5* OR prod_name:panasonic* prod_name:tw* 

Если вы компилировали SQLite для стандартного синтаксиса запроса, вы не можете использовать один запрос для этого, потому что приоритет оператора OR слишком высок и не может быть изменен скобками.

Итак, я нашел решение, наконец,

Вместо поиска из всех столбцов по отдельности я создал один столбец в базе данных, который содержит данные для требуемых столбцов для поиска,

пример

Мне нужно искать в prod_name & prod_short_desc , поэтому я создал столбец с именем data в базе данных и prod_name значения prod_name & prod_short_desc затем просмотрел только поле data работающее как шарм

Prod_name | prod_short_desc

 samsung | samsung s5 

Итак, теперь я объединил данные обоих столбцов в один с пробелом как разделитель

данные

Samsung samsung s5

И тогда поиск был очень быстрым, причем с запросом ниже,

 select * from productsearch where productsearch match ('samsung*s5*')