ends with (suffix) and contains string search using MATCH in SQLite FTS

我只是一个虾纸丫 提交于 2019-11-29 10:28:28

问题


I am using SQLite FTS extension in my iOS application. It performs well but the problem is that it matches only string prefixes (or starts with keyword search).

i.e.

SELECT FROM tablename WHERE columnname MATCH 'searchterm*'

works but

SELECT FROM tablename WHERE columnname MATCH '*searchterm'

or

SELECT FROM tablename WHERE columnname MATCH '*searchterm*'

does not.

Is there any workaround for this or any way to use FTS to build a query similar to "LIKE '%searchterm%'" query.

EDIT:

As pointed out by Retterdesdialogs, storing the entire text in reverse order and running a prefix search on reverse string is a possible solution for ends with/suffix search problem, which was my original question, but it wont work for 'contains' search. I have updated the question accordingly.


回答1:


In my iOS and Android applications, I have shied away from FTS search for exactly the reason that it doesn't support substring matches due to lack of suffix queries.

The workarounds seem complicated.

I have resorted to using LIKE queries, which while being less performant than MATCH, served my needs.




回答2:


The workaround is to store the reverse string in an extra column. See this link (its not exactly the same it should give a idea):

Search Suffix using Full Text Search




回答3:


To get it to work for contains queries, you need to store all suffixes of the terms you want to be able to search. This has the downside of making the database really large, but that can be avoided by compressing the data.

SQLite FTS contains and suffix matches



来源:https://stackoverflow.com/questions/11752840/ends-with-suffix-and-contains-string-search-using-match-in-sqlite-fts

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!