Adding Greek support in Full-Text search

XMLWordPrintable

    • Type: Suggestion
    • Resolution: Fixed
    • 3.12
    • Component/s: Indexing

      From a SAC case:

      We'd like to have Greek Lucene indexing support added into JIRA. We've done a core modification for one of our customers, but we would really like to see it in the official codeline.

      Objects affected:

      • jira/src/etc/languages/default/com/atlassian/jira/web/action/JiraWebActionSupport.properties
        admin.jira.allowed.language.greek=Greek
        
      • /jira/src/java/com/atlassian/jira/config/properties/APKeys.java
            public class Languages
            {
                public static final String ENGLISH = "english";
                public static final String GERMAN = "german";
                public static final String GREEK = "greek";
                public static final String RUSSIAN = "russian";
                public static final String CJK = "cjk";
                public static final String OTHER = "other";
            }
        
      • jira/src/java/com/atlassian/jira/issue/index/JiraAnalyzer.java
        /*
         * Copyright (c) 2002-2004
         * All rights reserved.
         */
        package com.atlassian.jira.issue.index;
        
        import com.atlassian.jira.ManagerFactory;
        import com.atlassian.jira.config.properties.APKeys;
        import com.atlassian.jira.issue.index.analyzer.CJKAnalyzer;
        import com.atlassian.jira.issue.index.analyzer.EnglishAnalyzer;
        import com.atlassian.jira.issue.index.analyzer.GermanAnalyzer;
        import com.atlassian.jira.issue.index.analyzer.SimpleAnalyzer;
        import org.apache.lucene.analysis.Analyzer;
        import org.apache.lucene.analysis.TokenStream;
        import org.apache.lucene.analysis.el.GreekAnalyzer;
        import org.apache.lucene.analysis.el.GreekCharsets;
        import org.apache.lucene.analysis.ru.RussianAnalyzer;
        import org.apache.lucene.analysis.ru.RussianCharsets;
        
        import java.io.Reader;
        
        public class JiraAnalyzer extends Analyzer
        {
            public static final Analyzer ANALYZER_FOR_INDEXING = new JiraAnalyzer(true);
            public static final Analyzer ANALYZER_FOR_SEARCHING = new JiraAnalyzer(false);
        
            private final Analyzer englishAnalyzer;
            private final Analyzer germanAnalyzer;
            private final Analyzer russianAnalyzer;
            private final Analyzer cjkAnalyzer;
            private final Analyzer otherAnalyzer;
            private final Analyzer greekAnalyzer;
        
            public JiraAnalyzer(boolean indexing)
            {
                this.englishAnalyzer = new EnglishAnalyzer(indexing);
                this.germanAnalyzer = new GermanAnalyzer(indexing);
                this.russianAnalyzer = new RussianAnalyzer(RussianCharsets.UnicodeRussian);
                this.cjkAnalyzer = new CJKAnalyzer(indexing);
                this.otherAnalyzer = new SimpleAnalyzer(indexing);
                this.greekAnalyzer = new GreekAnalyzer(GreekCharsets.UnicodeGreek);
            }
        
            /*
             * Create a token stream for this analyzer.
             */
            public final TokenStream tokenStream(String fieldname, Reader reader)
            {
                final String language = ManagerFactory.getApplicationProperties().getString(APKeys.JIRA_I18N_LANGUAGE_INPUT);
                if (APKeys.Languages.ENGLISH.equals(language))
                {
                    return englishAnalyzer.tokenStream(fieldname, reader);
                }
                else if (APKeys.Languages.GERMAN.equals(language))
                {
                    return germanAnalyzer.tokenStream(fieldname, reader);
                }
                else if (APKeys.Languages.GREEK.equals(language))
                {
                    return greekAnalyzer.tokenStream(fieldname, reader);
                }
                else if (APKeys.Languages.RUSSIAN.equals(language))
                {
                    return russianAnalyzer.tokenStream(fieldname, reader);
                }
                else if (APKeys.Languages.CJK.equals(language))
                {
                    return cjkAnalyzer.tokenStream(fieldname, reader);
                }
                else //'other' or languages that we don't know about yet.
                {
                    return otherAnalyzer.tokenStream(fieldname, reader);
                }
            }
        
        }
        
      • jira/src/java/com/atlassian/jira/web/action/admin/EditApplicationProperties.java
            public Map getAllowedLanguages()
            {
                Map allowedLanguages = new ListOrderedMap();
        
                allowedLanguages.put(APKeys.Languages.ENGLISH, getText("admin.jira.allowed.language.english"));
                allowedLanguages.put(APKeys.Languages.GERMAN, getText("admin.jira.allowed.language.german"));
                allowedLanguages.put(APKeys.Languages.GREEK, getText("admin.jira.allowed.language.greek"));
                allowedLanguages.put(APKeys.Languages.RUSSIAN, getText("admin.jira.allowed.language.russian"));
                allowedLanguages.put(APKeys.Languages.CJK, getText("admin.jira.allowed.language.cjk"));
                allowedLanguages.put(APKeys.Languages.OTHER, getText("admin.jira.allowed.language.other"));
        
                return allowedLanguages;
            }
        

            Assignee:
            Mark Lassau (Inactive)
            Reporter:
            Bogdan Dziedzic [Atlassian]
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: