2012-08-01 33 views
7

Tôi đang sử dụng phần mở rộng SQLite FTS trong ứng dụng iOS của mình. Nó hoạt động tốt nhưng vấn đề là nó chỉ khớp với tiền tố chuỗi (hoặc bắt đầu với tìm kiếm từ khóa).kết thúc bằng (hậu tố) và chứa tìm kiếm chuỗi bằng MATCH trong SQLite FTS

tức

CHỌN TỪ tablename ĐÂU columnname Đội hình thi đấu 'searchterm *'

công trình nhưng

CHỌN TỪ tablename ĐÂU columnname Đội hình thi đấu '* searchterm'

hoặc

CHỌN TỪ tablename WHERE columnname MATCH '* searchterm *'

thì không.

Có cách giải quyết nào cho cách này hay bất kỳ cách nào để sử dụng FTS để tạo truy vấn tương tự truy vấn "LIKE"% searchterm% '".

EDIT:

Như đã chỉ ra bởi Retterdesdialogs, lưu trữ toàn bộ văn bản theo thứ tự ngược và chạy một tìm kiếm tiền tố trên chuỗi ngược lại là một giải pháp khả thi cho mục đích với vấn đề tìm kiếm/hậu tố, đó là câu hỏi ban đầu của tôi, nhưng nó sẽ không hoạt động cho tìm kiếm 'contains'. Tôi đã cập nhật câu hỏi cho phù hợp.

+0

Hầu hết người dùng mong đợi tìm kiếm là tìm kiếm chuỗi phụ, tôi muốn nói chủ yếu là do Google. Tôi hy vọng các chàng trai SQLite đang làm việc trên hỗ trợ chuỗi con trong FTS. – Diederik

Trả lời

1

Trong iOS của tôi và các ứng dụng Android, tôi đã tránh xa những tìm kiếm FTS cho chính xác lý do mà nó không hỗ trợ chuỗi phù hợp do thiếu các truy vấn hậu tố.

Cách giải quyết có vẻ phức tạp.

Tôi đã sử dụng các truy vấn LIKE, trong khi ít hoạt động hơn MATCH, đã đáp ứng nhu cầu của tôi.

1

Cách khắc phục là lưu trữ chuỗi ngược trong cột phụ. Xem liên kết này (nó không giống hệt nhau nó sẽ cho một ý tưởng):

Search Suffix using Full Text Search

+0

Cảm ơn bạn đã trả lời. Nó giúp nhưng không giải quyết hoàn toàn vấn đề của tôi. – lukya

2

Để có được nó để làm việc cho chứa các truy vấn, bạn cần phải lưu trữ tất cả các hậu tố của các điều khoản mà bạn muốn để có thể tìm kiếm . Điều này có nhược điểm làm cho cơ sở dữ liệu thực sự lớn, nhưng điều đó có thể tránh được bằng cách nén dữ liệu.

SQLite FTS contains and suffix matches

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