MySQL 5.6全文搜索与ElasticSearch for ASP.NET 4.5 Web App

Ida*_*ter 3 mysql asp.net full-text-search elasticsearch mysql-5.6

我正在ASP.NET 4.5 C#中构建一个Web应用程序.我的应用程序将在很大程度上依赖于搜索功能.我正在为我的项目寻找一个高性能的搜索解决方案.我正在研究一种高效/快速且易于实施的方法.

经过一些解决方案后,我发现ElasticSearch提供了出色的搜索功能,如果我决定在那里部署我的项目,它也会得到Amazon Web Services的支持.

但是,我已经读过MySQL 5.6现在具有InnoDB表的全文搜索功能.我想知道每种方法的不同,缺点和优点,以便决定在我的下一个项目中使用哪一种方法.

我的主要目标是:能够对我的数据库进行非常快速的搜索,并享受自然语言搜索,评分等的好处.对于我的可搜索文本字段,我实际上会有非常小的100个字符的文本字段.

我的问题摘要:

  1. MySQL 5.6全文搜索和ElasticSearch之间的基本区别是什么?(的优点和缺点)
  2. 使用MySQL全文搜索,我是否需要将搜索索引/功能与数据库分开(例如,使用ElasticSearch我使用的ELasticSearch服务器可以部署在不同的服务器上.我想知道它是否与MySQL Full一样文字搜索呢?
  3. 哪一个更容易实现?
  4. 在ASP.NET项目中使用它们是否有任何优点(如支持的客户端库等)

谢谢.

Prz*_*ita 13

我不是很熟悉MySQL 5.6全文搜索功能,但我在ASP.NET Web App中使用ElasticSearch.

  1. 在SQL中查询MySQL,在JSON中查询ES,因为它是RESTful

  2. 虽然MySQL是数据库管理系统本身,但ElasticSearch只是一个搜索引擎.执行搜索的数据存储在其索引中(ElasticSearch数据存储称为索引).这个索引有时候会失败,然后你需要在一些外部数据库中备份你的数据(我正在使用NoSQL解决方案 - MongoDB,因为我很难解决BigData问题),你可以从中恢复它.

  3. ElasticSearch是分布式系统.它使用Shards - 当您执行搜索时,索引会被分割为多个分片,这些分片由不同的线程独立搜索.然后将搜索结果合并为一组.由于评分是根据执行搜索的记录数量以某种方式计算的,因此对于同一记录可能会有所不同,具体取决于它是哪个分片以及分配给此分片的记录数(尽管可在搜索查询选项中配置) - 见DFSThenFetch)

  4. ES可以通过NEST库使用C#代码进行交互,这允许您将ES实体映射到C#类并通过LINQ通过lambda语法查询它们(利用表达式而不是谓词)

  5. 如果您的实体具有许多字段,则查询ElasticSearch可能非常具有挑战性.在我的例子中,我必须实现一个非常复杂的Query构建器,因为在ElasticSearch上执行搜索查询的方法很多 - 请参阅http://www.elasticsearch.org/guide/reference/query-dsl/(所有这些查询类型)在NEST库中实现).您对匹配字符串的查询方式与过滤数据的方式完全不同,例如.GreaterThan或LessOEqual.

  6. ES允许你利用基于Levenshtein距离的模糊匹配,这在与拼写错误进行斗争时非常好.

  7. ElasticSearch非常非常快.MS SQL Server搜索我的数据(通过简单查询)超过1分钟,ES在不到20毫秒的时间内完成(即使使用非常复杂的查询).它是Lucene搜索引擎的分布式实现.

我知道我的帖子不是你的问题的直接答案,但我希望它能为你提供有关ElasticSearch的一些信息,并以任何方式帮助你.干杯.