我在桌面上有非常大的数据(超过4lc行)。现在我正在使用mysql全文搜索,但速度非常慢。
我谷歌并发现许多博客建议使用弹性搜索进行搜索。 我们正在测试弹性搜索是否有助于快速搜索。
但我们得到相反的结果(mysql更好的搜索),但我怀疑我是否以正确的方式使用了弹性搜索。我使用的弹性搜索查询是: -
{
"query" : {
"bool" : {
"must" : {
"query_string" : {
"query" : "goog*",
"default_field" : "search"
}
}
}
},
"size" : 1000
}
对于mysql中的相同搜索,我们使用了
SELECT SQL_NO_CACHE * FROM table1 WHERE (MATCH (search) AGAINST (' +goog*' IN BOOLEAN MODE))
我得到时间差异: -
弹性时间= 0.34929585456848
mysql time = 0.02162504196167
任何我错的建议我都非常感谢
答案 0 :(得分:4)
查询有点慢的第一个原因是因为您在搜索时使用通配符...
https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html
https://www.elastic.co/guide/en/elasticsearch/guide/current/search-in-depth.html
我建议您研究弹性搜索映射,分析器以获得弹性搜索的好处,您需要正确索引数据,并应用正确的查询集......
Filename search with ElasticSearch
这是一个稍微高级的例子,只是展示如何在文件的单词之间实现搜索..
您的数据如何编制索引也会影响搜索查询时间,以及您将使用的查询本身..
您可以在这里注册并查看有关弹性人提供的不同类型查询的简短视频。
https://www.elastic.co/webinars/elasticsearch-query-dsl
如果没有适当的分析,你无法决定哪一个更好......在弹性搜索中,数据的索引会产生很大的影响..