Как позволить произойти при поиске использования lucene.net?

Как другие упомянули здесь, соглашения должны быть инструментом для добавления к простоте использования и удобочитаемости. Не как кандалы или клуб для мучения разработчиков.

Однако мое персональное предпочтение должно использовать исключительные названия и таблиц и столбцов. Это, вероятно, происходит из моей среды программирования. Имена классов вообще исключительны, если они не своего рода набор. В моем уме я храню или читаю отдельные записи в рассматриваемой таблице, таким образом исключительный имеет смысл мне.

Эта практика также позволяет мне резервировать множественные имена таблиц для тех, которые хранят many-many отношения между моими объектами.

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

мне нравится использовать префиксы ограниченным способом (tbl для имен таблиц, sp_ для имен proc, и т.д.), хотя многие полагают, что это добавляет помеху. Я также предпочитаю названия CamelBack к подчеркиваниям, потому что я всегда заканчиваю тем, что совершил нападки + вместо _ при введении имени. Многие другие не соглашаются.

Вот другая хорошая ссылка для инструкций по соглашению о присвоении имен: http://www.xaprb.com/blog/2008/10/26/the-power-of-a-good-sql-naming-convention/

Помнит, что наиболее важный фактор в Вашем соглашении - то, что оно имеет смысл людям, взаимодействующим с рассматриваемой базой данных. Нет никакого "Одного Кольца для Управления Их Всех" когда дело доходит до соглашений о присвоении имен.

15
задан devson 28 July 2009 в 08:28
поделиться

2 ответа

Для этого вам нужно написать собственный класс анализатора. Это относительно просто. Вот тот, который я использую. Он сочетает в себе фильтрацию стоп-слов. Стемминг портера и (это может быть слишком много для ваших нужд) удаление акцентов с символов.

/// <summary>
/// An analyzer that implements a number of filters. Including porter stemming,
/// Diacritic stripping, and stop word filtering.
/// </summary>
public class CustomAnalyzer : Analyzer
{
    /// <summary>
    /// A rather short list of stop words that is fine for basic search use.
    /// </summary>
    private static readonly string[] stopWords = new[]
    {
        "0", "1", "2", "3", "4", "5", "6", "7", "8",
        "9", "000", "$", "£",
        "about", "after", "all", "also", "an", "and",
        "another", "any", "are", "as", "at", "be",
        "because", "been", "before", "being", "between",
        "both", "but", "by", "came", "can", "come",
        "could", "did", "do", "does", "each", "else",
        "for", "from", "get", "got", "has", "had",
        "he", "have", "her", "here", "him", "himself",
        "his", "how","if", "in", "into", "is", "it",
        "its", "just", "like", "make", "many", "me",
        "might", "more", "most", "much", "must", "my",
        "never", "now", "of", "on", "only", "or",
        "other", "our", "out", "over", "re", "said",
        "same", "see", "should", "since", "so", "some",
        "still", "such", "take", "than", "that", "the",
        "their", "them", "then", "there", "these",
        "they", "this", "those", "through", "to", "too",
        "under", "up", "use", "very", "want", "was",
        "way", "we", "well", "were", "what", "when",
        "where", "which", "while", "who", "will",
        "with", "would", "you", "your",
        "a", "b", "c", "d", "e", "f", "g", "h", "i",
        "j", "k", "l", "m", "n", "o", "p", "q", "r",
        "s", "t", "u", "v", "w", "x", "y", "z"
    };

    private Hashtable stopTable;

    /// <summary>
    /// Creates an analyzer with the default stop word list.
    /// </summary>
    public CustomAnalyzer() : this(stopWords) {}

    /// <summary>
    /// Creates an analyzer with the passed in stop words list.
    /// </summary>
    public CustomAnalyzer(string[] stopWords)
    {
        stopTable = StopFilter.MakeStopSet(stopWords);       
    }

    public override TokenStream TokenStream(string fieldName, System.IO.TextReader reader)
    {
        return new PorterStemFilter(new ISOLatin1AccentFilter(new StopFilter(new LowerCaseTokenizer(reader), stopWords)));
    }
}
20
ответ дан 1 December 2019 в 02:37
поделиться

Вы можете использовать Snowball или PorterStemFilter . См. Документацию Java Analyzer в качестве руководства по объединению различных фильтров / токенизаторов / анализаторов. Обратите внимание, что для индексирования и поиска необходимо использовать один и тот же анализатор, поэтому обработка стемминга должна начинаться во время индексации.

7
ответ дан 1 December 2019 в 02:37
поделиться
Другие вопросы по тегам:

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