【发布时间】:2017-06-13 00:42:01
【问题描述】:
我正在尝试在我的 laravel 应用中实现搜索功能。由于数据安全问题,我的主管不喜欢安哥拉。除此之外,一个不错的选择是实现弹性搜索,另一个是使用 mysql 的全文搜索。我不确定优缺点是什么,虽然我在一些地方读到弹性搜索应该是更好的选择,但我想了解我正在使用什么,因为在此之前我没有使用过搜索。
我正在查看 MySQL 要求,看来我只能使用 InnoDb 引擎在 5.6 或更高版本中实现它。除此之外,我只能在 char 和 text 类型字段上实现全文索引。我不确定 Elastic 搜索中允许使用哪些类型的字段。
我知道我必须这样做:
DB::statement('ALTER TABLE posts ADD FULLTEXT search(title, body)');
然后我想我会做类似的事情:
SELECT * FROM posts
WHERE MATCH (title, body)
AGAINST ('foo' IN NATURAL LANGUAGE MODE);
是否有针对此的 Eloquent 实现,还是我必须使用 DB 外观手动执行此操作?如果没有 Eloquent 实现,是否有具有此功能的 3rd 方包?
除此之外,我实际上也必须在相关表中进行搜索,例如 cmets 和标签等。如何跨表创建索引或者不可能?如果无法在 MySQL 中跨表创建索引,ES 中有什么可以克服的吗?
使用 MySQL 全文搜索与弹性搜索相比,我可能面临哪些其他优缺点?
【问题讨论】:
-
@jeremy 是正确的。除非您有复杂的搜索功能,否则您可以从 mysql 开始以避免维护新堆栈。如果您可以分享一些搜索用例示例,我们可以提供更多帮助。
标签: mysql laravel search elasticsearch