弹性搜索全文vs mysql全文?

Roh*_*han 9 mysql search elasticsearch laravel

我正在尝试在我的laravel应用程序中实现搜索功能.由于数据安全问题,我的主管不喜欢Angolia.除此之外,一个好的选择是实现弹性搜索,另一个是使用mysql的全文搜索.我不确定有什么优点和缺点,虽然我在一些地方读过弹性搜索应该是更好的选择,但我想了解我正在使用的内容,因为我之前没有使用过搜索.

我正在研究MySQL的要求,似乎我只能使用InnoDb引擎实现5.6或更高版本.除此之外,我只能在char和text类型字段上实现全文索引.我不确定弹性搜索中允许哪些字段.

我知道我必须这样:

DB::statement('ALTER TABLE posts ADD FULLTEXT search(title, body)');
Run Code Online (Sandbox Code Playgroud)

然后我想我做的事情如下:

SELECT * FROM posts
WHERE MATCH (title, body)
AGAINST ('foo' IN NATURAL LANGUAGE MODE);
Run Code Online (Sandbox Code Playgroud)

是否有针对此的Eloquent实现,或者我是否必须使用数据库外观手动执行此操作?如果没有Eloquent实现,是否有第三方软件包具有此功能?

除此之外,我实际上必须在相关表中搜索评论和标签等等.如何跨表创建索引或者不可能?如果无法在MySQL中跨表创建索引,那么在ES中是否有任何东西可以解决这个问题.

使用针对弹性搜索的MySQL全文搜索,我可能面临的其他优缺点是什么?

Jer*_*nch 8

使用MySQL,您将始终编制索引并搜索数据.

使用ElasticSearch,您可以更灵活地将索引编入一个单元.您可以获取项目的所有内容注释和标记,并将其作为一个项目放在ES中.

你也可能会发现ES会提供更好的性能和更好的结果,你会得到mysql.您还可以更灵活地使用同义词和加权等内容.

但它确实意味着您需要维护另一个堆栈,并且您必须管理索引和内容更新.

因此,这取决于您的数据大小以及搜索作为功能的重要性.

我建议您从MySql文本搜索开始,因为在一个简单的情况下,它将很快设置,如果这不提供您需要的,那么升级到弹性搜索.您将至少拥有一个稻草人功能,可用于进一步优化您的搜索要求.


Pau*_*nko 6

ElasticSearch 与 MySQl-search 的主要区别在于,当通过索引处理大量数据时,ES 的工作速度更快。

该索引包含现成的数据集,您可以使用这些数据来操作进一步的 ES 过滤器。因此,如果您使用 ES 进行搜索,则不必像在 MySQL 中那样直接向数据库发出请求。

这是在 HighLoad 项目中使用 ElasticSearch 的主要原因。

对于少量数据,您不会感觉到差异。

  • 您能否告诉我有多少数据量会开始产生影响?例如,300,000 条文本记录会有多少差异?谢谢 (2认同)