为Java中的部分字符串匹配而设计的好的数据库平台是什么?
What is a good database platform designed for partial string matching in Java?
如果这个问题看起来有点笼统,我深表歉意,但我一直在谷歌搜索无济于事,我不确定还能去哪里。
我在 java 中有一个 SQLite 数据库,它存储了很多歌曲 title/artist 的名字。目前我正在这样查询数据库:
SELECT * FROM music WHERE (title LIKE "%adio%" OR artist LIKE "%adio%") ORDER BY title, ASC LIMIT 20
显然这种方法相当慢,因为我在搜索词的两边都使用了通配符。
事实是,如果我在 iTunes 中搜索 "Radioactive",我可以搜索 "adio" 并且 Radioactive 会很快弹出。什么样的数据库可以如此快速地完成这种搜索?我研究过 SQLite 中的 FTS,但这不允许使用带前缀的通配符。我觉得 SQLite 在这里不是正确的选择,所以我正在寻找建议。感谢您的宝贵时间!
许多关系数据库都支持称为 "Full Text Search" (FTS) 的功能,这正是您所需要的。
FTS 是一种特殊的索引,可以加快单词搜索速度。 FTS 查询的语法取决于数据库(它不像 SQL 那样标准)。 FTS 索引可以是特定于语言的,它允许搜索相似词、同义词、plural/singular 除了精确词和 prefix/suffix 搜索。
如果您正在寻找非商业选项,Postgres 支持 FTS。
但这实际上取决于您的应用程序。使用非关系数据库可能会更好。查看独立全文搜索索引的 Lucene,或构建在 Lucene 之上的 Elastic。
可以使用 Java 访问大多数数据库,当然还有常见的数据库,因此在选择解决方案时这不是问题。
如果这个问题看起来有点笼统,我深表歉意,但我一直在谷歌搜索无济于事,我不确定还能去哪里。
我在 java 中有一个 SQLite 数据库,它存储了很多歌曲 title/artist 的名字。目前我正在这样查询数据库:
SELECT * FROM music WHERE (title LIKE "%adio%" OR artist LIKE "%adio%") ORDER BY title, ASC LIMIT 20
显然这种方法相当慢,因为我在搜索词的两边都使用了通配符。
事实是,如果我在 iTunes 中搜索 "Radioactive",我可以搜索 "adio" 并且 Radioactive 会很快弹出。什么样的数据库可以如此快速地完成这种搜索?我研究过 SQLite 中的 FTS,但这不允许使用带前缀的通配符。我觉得 SQLite 在这里不是正确的选择,所以我正在寻找建议。感谢您的宝贵时间!
许多关系数据库都支持称为 "Full Text Search" (FTS) 的功能,这正是您所需要的。
FTS 是一种特殊的索引,可以加快单词搜索速度。 FTS 查询的语法取决于数据库(它不像 SQL 那样标准)。 FTS 索引可以是特定于语言的,它允许搜索相似词、同义词、plural/singular 除了精确词和 prefix/suffix 搜索。
如果您正在寻找非商业选项,Postgres 支持 FTS。
但这实际上取决于您的应用程序。使用非关系数据库可能会更好。查看独立全文搜索索引的 Lucene,或构建在 Lucene 之上的 Elastic。
可以使用 Java 访问大多数数据库,当然还有常见的数据库,因此在选择解决方案时这不是问题。