Действительно ли возможно разработать мощное использование поисковой системы Erlang, Mnesia & Yaws?

Другие ответы полны анти-паттернов. Потребность в операторах переключения (особенно часто повторяемых) выглядит как возможность двигаться в направлении ООП.

Я не рефакторинг всего этого, но просто чтобы дать вам идею.

public class SearchHelper
{
    //why does this need to return the model at all? the model isn't altered 
    //and would already be in scope for whatever is calling this method
    public static void GetSearchResults(SearchModel model)
    {
        List<ResultModel> results = new List<ResultModel>();

        try
        {
            using (SqlConnection conn = new SqlConnection("connection string"))
            {
                conn.Open();

                using (SqlCommand cmd = AdoBase.GetSqlCommand(model.SqlCommandName, conn))
                {
                    //this will mutate the object, so you don't need a return type. I'd suggest refactoring this further.
                    model.BuildSqlCommand(cmd);

                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        //your code sample wasn't returning this, but maybe you intended to?
                        BuildResultSet(reader);
                    }

                }
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    private static IEnumerable<ResultModel> BuildResultSet(SqlDataReader reader)
    {
        var results = new List<ResultModel>();

        if (!reader.HasRows) { return results; }

        while (reader.Read())
        {
            ResultModel result = new ResultModel();

            //  ...the result composition would need to be refactored in a similar way as well
            results.Add(result);
        }
        return results;
    }
}

public abstract class SearchModel
{
    public string SqlCommandName { get; private set; }

    private SearchModel() { }

    protected SearchModel(string sqlCommandName)
    {
        SqlCommandName = sqlCommandName;
    }

    public abstract void BuildSqlCommand(SqlCommand command);
}

public class UserSearchModel : SearchModel
{
    public string Name { get; set; }

    public string Username { get; set; }

    public UserSearchModel() : base("GeneralUserSearch")
    {
    }

    //warning...this mutates the input parameter
    public override void BuildSqlCommand(SqlCommand command)
    {
        if (!string.IsNullOrWhiteSpace(Name))
        {
            command.Parameters.AddWithValue(nameof(Name), Name);
        }
        if (!string.IsNullOrWhiteSpace(Username))
        {
            command.Parameters.AddWithValue(nameof(Username), Username);
        }
    }
}

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

Тем не менее, вы можете видеть, как это субъективно и может быть неуместным для SO. Кажется, здесь есть проблема с фундаментальным дизайном.

6
задан Jonas 13 February 2012 в 22:02
поделиться

3 ответа

Насколько я знаю, что естественный язык Степенного множества, обрабатывающий поисковую систему, разрабатывается с помощью erlang.

Вы смотрели на couchdb (который записан в erlang также) как возможный инструмент, чтобы помочь Вам решить немного проблем на своем пути?

4
ответ дан 8 December 2019 в 03:55
поделиться

В 'rdbms' contrib, существует реализация алгоритма стемминга Портера. Это никогда не интегрировалось в 'rdbms', таким образом, это в основном просто находится там. Мы использовали его внутренне, и это работало вполне хорошо, по крайней мере, для наборов данных, которые не были огромны (я не протестировал его на огромных объемах данных).

Соответствующие модули:

rdbms_wsearch.erl
rdbms_wsearch_idx.erl
rdbms_wsearch_porter.erl

Затем существует, конечно, платформа MapReduce Дискотеки.

Можно ли сделать самый быстрый механизм там, я не мог бы сказать. Существует ли рынок для более быстрой поисковой системы? У меня никогда не было проблем со скоростью, например, Google. Но поисковое средство, которое увеличило мои возможности нахождения хороших ответов на мои вопросы, заинтересует меня.

1
ответ дан 8 December 2019 в 03:55
поделиться

Я рекомендовал бы CouchDB вместо Mnesia.

ОТКЛОНЕНИЯ ОТ КУРСА довольно хороши. Необходимо также рассмотреть MochiWeb.

Вы не пойдете не так, как надо с Erlang

2
ответ дан 8 December 2019 в 03:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: