Intereting Posts
Как уменьшить время, затрачиваемое MPAndroidChart для отображения данных? Использование другого manifestPlaceholder для каждого варианта сборки Ant build: невозможно найти tools.jar. Ожидаемое найти его в C: \ Program Files \ Java \ jre7 \ lib \ tools.jar Вставить разделитель между view-pager Android: есть метод View.onClick (), вызванный в основном потоке пользовательского интерфейса? Запустить приложение из панели уведомлений в android Как я могу сделать элементы на ActionBar одинаковыми слева, один в центре и один справа? Масштабировать изображение, сохраняя его соотношение сторон в фоновом режиме Неиспользуемые ресурсы String и изображений в Android Получение дочерних элементов из LinearLayout Xamarin Android с multidex – ошибка в режиме отладки Любая замена Bugsense для ACRA NullPointerException в FirebaseMessagingService.zzo (Неизвестный источник) Сплит-система Android Получение атрибута «android: icon»: атрибут не является строковым значением »при загрузке APK в хранилище воспроизведения

Поиск в нескольких столбцах с использованием полнотекстового поиска (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*')