2013-08-15 1 views
3

Я создаю веб-приложение в ASP.NET 4.5 C#. Мое приложение будет в значительной степени полагаться на возможности поиска. Я ищу высокопроизводительное поисковое решение для моего проекта. Я рассматриваю тот, который эффективен/быстр и прост в реализации.MySQL 5.6 Полнотекстовый поиск vs ElasticSearch для моего ASP.NET 4.5 Веб-приложение

После того, как вы перешли на несколько решений, я нашел ElasticSearch, чтобы предложить отличные возможности поиска, а также поддерживается Amazon Web Services, если я решил разместить там свой проект.

Однако, я читал, что MySQL 5.6 теперь поддерживает полнотекстовые поисковые таблицы InnoDB. Я хотел узнать разницу, минусы и плюсы каждого подхода, чтобы решить, какой из них использовать в моем следующем проекте.

Моя основная цель: возможность очень быстро выполнять поиск по моей базе данных и пользоваться преимуществами поиска на естественном языке, подсчета очков и т. Д. У меня на самом деле очень маленькие текстовые поля по 100 символов для текстовых полей с возможностью поиска.

Резюме мои вопросы:

  1. Что такое foundemental различия между MySQL 5.6 Full Text Search и ElasticSearch? (преимущества и недостатки)
  2. С полным текстовым поиском MySQL мне нужно отделить индекс поиска/функциональность от базы данных (например, с помощью ElasticSearch я использую сервер ELasticSearch, который я могу развернуть на другом сервере. если это работает так же с MySQL полнотекстового поиска тоже?
  3. Какой проще реализовать?
  4. есть ли какие-либо преимущества использования либо в проекте ASP.NET (например, поддерживаемых клиентских библиотек и т.д.)

ответ

13

Я не очень хорошо знаком с MySQL 5.6 Возможности полнотекстового поиска, но я использую ElasticSearch в своем веб-приложении ASP.NET.

  1. MySQL опрашивается в SQL, ES запрашивается в формате JSON, как это RESTful

  2. Хотя MySQL сама система управления базами данных, ElasticSearch только поисковой системы. Данные, по которым выполняется поиск, хранятся в его индексе (хранилище данных ElasticSearch называется индексом). Этот индекс иногда бывает неудачным, и тогда вам нужно иметь резервные копии данных в некоторой внешней базе данных (я использую решение NoSQL - MongoDB, поскольку я борюсь с проблемой BigData), из которого вы его восстанавливаете.

  3. ElasticSearch - это распределенная система. Он использует Осколки - при выполнении поиска индекс разбивается на количество осколков, которые независимо друг от друга обрабатываются отдельными потоками. Затем результаты поиска объединяются в один набор. Поскольку подсчет рассчитывается каким-то образом на основе количества записей, на которых выполняется поиск, он может отличаться для одной и той же записи в зависимости от того, какой осколок он и сколько записей было присвоено этому осколку (хотя он настраивается в вариантах поискового запроса - см DFSThenFetch)

  4. ES можно взаимодействовать с C# код, используя при помощи НЕСТ библиотеки, что позволяет отображать ES объекты в классы C# и запрашивать их LINQ, с помощью синтаксиса лямбда (с использованием выражений больше, чем предикаты)

  5. Запрос ElasticSearch может быть довольно сложным, если ваши объекты имеют много полей.В моем случае мне пришлось реализовать довольно сложный построитель запросов, так как существует очень много способов выполнения поискового запроса на ElasticSearch - см. http://www.elasticsearch.org/guide/reference/query-dsl/ (все эти типы запросов реализованы в библиотеке NEST). Вы запрашиваете по-разному для соответствия строки, чем фильтрацию данных, например. GreaterThan или LessOEqual.

  6. ES позволяет использовать нечеткое согласование на основе расстояния Levenshtein Distance, которое отлично подходит для борьбы с опечатками.

  7. ElasticSearch очень, очень быстро. Где MS SQL Server искал мои данные (по простому запросу) более 1 минуты, ES делает это менее чем за 20 мс (даже используя очень сложный запрос). Это распределенная реализация поисковой системы Lucene.

Я знаю, что мой пост не прямой ответ на ваши вопросы, но я надеюсь, что это дает вам некоторую информацию, касающуюся ElasticSearch, и помогает вам в любом случае. Приветствия.