2014-09-24 17 views
8

Tôi đang sử dụng FTS cho các truy vấn cơ sở dữ liệu của tôi để tăng tốc độ tìm kiếm như tôi cần phải tìm kiếm trong mô tả văn bản cũng có,Tìm kiếm trong nhiều cột sử dụng Full Text Search (FTS) với nhiều thẻ sử dụng toán tử OR

Khi tôi cố gắng để truy vấn sử dụng cột đơn làm việc tốt của nó như dưới đây

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

Và cũng có thể,

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

Vì vậy, trên cả các truy vấn cho tôi kết quả dự kiến ​​nhưng khi tôi cố gắng để kết hợp cả hai truy vấn sử dụng OR điều hành của nó không đem lại cho tôi bất kỳ kết quả

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

Vì vậy, tôi muốn biết nếu tôi làm điều gì sai trái ở đây trong khi sử dụng OR điều hành để tìm kiếm nhiều cột

CẬP NHẬT

Truy vấn bên dưới hoạt động tốt nhưng không đáp ứng được yêu cầu của tôi,

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

Bạn có thể thấy rằng nếu tôi xóa nhiều mã thông báo thì cũng hoạt động tốt với toán tử OR.

+0

Câu hỏi hay :) –

+0

Tôi không biết gì về FTS, nhưng ... bạn có thể thử: 'match ('prod_name: panasonic * tw *' OR 'prod_short_desc: samsung * s5 *')' (các chuỗi riêng biệt trong mệnh đề kết hợp tương tự) ** hoặc ** 'match ('prod_name: panasonic * tw *') HOẶC khớp ('prod_short_desc: samsung * s5 *')' (mệnh đề kết hợp riêng biệt)? –

+0

@ FrankN.Stein đã thử cả hai, không hoạt động 1st cho tất cả kết quả có nghĩa là nó hoàn thành bỏ qua các điều kiện & thứ 2 cung cấp cho sai paramters chức năng phù hợp() –

Trả lời

0

Vì vậy, tôi tìm thấy giải pháp cuối cùng,

thay vì tìm kiếm từ tất cả các cột riêng, tôi tạo ra một cột duy nhất trong cơ sở dữ liệu chứa dữ liệu cho các cột cần thiết để được tìm kiếm vào,

Ví dụ

tôi cần phải tìm kiếm trong prod_name & prod_short_desc cột, vì vậy tôi đã tạo ra một cột tên là data trong cơ sở dữ liệu và nối các giá trị của prod_name & prod_short_desc sự n chỉ nhìn vào trường data hoạt động như một nét duyên dáng

prod_name | prod_short_desc

samsung | samsung s5 

Vì vậy, bây giờ tôi sáp nhập các dữ liệu của cả hai cột thành một với không gian như một seperator

dữ liệu

samsung samsung s5

Và sau đó tìm kiếm rất nhanh với truy vấn bên dưới,

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

FTS của SQLite chỉ hỗ trợ tìm kiếm tiền tố đơn giản.

Truy vấn như prod_short_desc:samsung*s5* bao gồm hai biểu thức, prod_short_desc:samsung*s5*, hoạt động chính xác giống như khi bạn viết prod_short_desc:samsung* s5*.

Nếu bạn đã biên soạn SQLite cho cú pháp truy vấn nâng cao, bạn có thể sử dụng một truy vấn như:

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

Nếu bạn đã biên soạn SQLite cho cú pháp truy vấn chuẩn, bạn không thể sử dụng một truy vấn duy nhất cho điều này bởi vì Ưu tiên của toán tử OR quá cao và không thể sửa đổi được bằng dấu ngoặc đơn.

+0

cùng một vấn đề, không có kết quả! –

Các vấn đề liên quan