ClassNotFoundException: org.elasticsearch.index.analysis.hebrew.HebrewAnalyzerProvider


#1

I am trying to create an index with the following settings (I don't have a Hebrew plugin and I am trying to create a simple Hebrew analyzer):

{
	"analysis" : {		
		"filter" : {			
			"hebrew_common_grams_index" : {
				"type" : "common_grams",
				"common_words" : ["אבל", "או", "אולי", "אותה", "אותו", "אותי", "אותך", "אותם", "אותן", "אותנו", "אז", "אחר", "אחרות", "אחרי", "אחרים", "אחרת", "אי", "איזה", "איך", "אין", "איפה", "איתה", "איתו", "איתי", "איתך", "איתכם", "איתכן", "איתם", "איתן", "איתנו", "אך", "אל", "אלה", "אלו", "אם", "אנחנו", "אני", "אם", "אף", "אצל", "אשר", "את", "אתה", "אתכם", "אתכן", "אתם", "אתן", "באמצע", "באמצעות", "בגלל", "בין", "בלי", "במידה", "ברם", "בשביל", "בתוך", "גם", "דרך", "הוא", "היא", "היה", "היכן", "היתה", "היתי", "הייתי", "הם", "הן", "הנה", "הרי", "ואילו", "ואת", "זאת", "זה", "יהיה", "יוכל", "יוכלו", "יותר", "יכול", "יכולה", "יכולות", "יכולים", "יכלו", "יש", "כאן", "כאשר", "כולם", "כולן", "כזה", "כי", "כיצד", "כך", "ככה", "כל", "כלל", "כמו", "כן", "כפי", "כאשר", "לא", "לאו", "לאן", "לבין", "לה", "להיות", "להם", "להן", "לו", "לי", "לכם", "לכן", "למה", "למטה", "למעלה", "למרות", "לנו", "לעבר", "להיכן", "לפיכך", "לפני", "מאד", "מאחורי", "מאין", "מאיפה", "מבלי", "מבעד", "מדוע", "מדי", "מה", "מהיכן", "מול", "מחוץ", "מי", "מכאן", "מכיוון", "מלבד", "מן", "מניין", "מנין", "מסוגל", "מעט", "מעטים", "מעל", "מצד", "מתחת", "מתי", "נגד", "נו", "עד", "על", "עלי", "עליה", "עליהם", "עליהן", "עליו", "עליך", "עליכם", "עלינו", "עם", "עצמה", "עצמו", "עצמי", "עצמם", "עצמן", "עצמנו", "פה", "רק", "שוב", "שוב", "של", "שלה", "שלהם", "שלהן", "שלו", "שלי", "שלך", "שלכם", "שלכן", "שלנו", "שם", "תהיה", "תחת"],
				"ignore_case" : true,
				"query_mode" : false
			},
			"hebrew_common_grams_query" : {
				"type" : "common_grams",
				"common_words" : ["אבל", "או", "אולי", "אותה", "אותו", "אותי", "אותך", "אותם", "אותן", "אותנו", "אז", "אחר", "אחרות", "אחרי", "אחרים", "אחרת", "אי", "איזה", "איך", "אין", "איפה", "איתה", "איתו", "איתי", "איתך", "איתכם", "איתכן", "איתם", "איתן", "איתנו", "אך", "אל", "אלה", "אלו", "אם", "אנחנו", "אני", "אם", "אף", "אצל", "אשר", "את", "אתה", "אתכם", "אתכן", "אתם", "אתן", "באמצע", "באמצעות", "בגלל", "בין", "בלי", "במידה", "ברם", "בשביל", "בתוך", "גם", "דרך", "הוא", "היא", "היה", "היכן", "היתה", "היתי", "הייתי", "הם", "הן", "הנה", "הרי", "ואילו", "ואת", "זאת", "זה", "יהיה", "יוכל", "יוכלו", "יותר", "יכול", "יכולה", "יכולות", "יכולים", "יכלו", "יש", "כאן", "כאשר", "כולם", "כולן", "כזה", "כי", "כיצד", "כך", "ככה", "כל", "כלל", "כמו", "כן", "כפי", "כאשר", "לא", "לאו", "לאן", "לבין", "לה", "להיות", "להם", "להן", "לו", "לי", "לכם", "לכן", "למה", "למטה", "למעלה", "למרות", "לנו", "לעבר", "להיכן", "לפיכך", "לפני", "מאד", "מאחורי", "מאין", "מאיפה", "מבלי", "מבעד", "מדוע", "מדי", "מה", "מהיכן", "מול", "מחוץ", "מי", "מכאן", "מכיוון", "מלבד", "מן", "מניין", "מנין", "מסוגל", "מעט", "מעטים", "מעל", "מצד", "מתחת", "מתי", "נגד", "נו", "עד", "על", "עלי", "עליה", "עליהם", "עליהן", "עליו", "עליך", "עליכם", "עלינו", "עם", "עצמה", "עצמו", "עצמי", "עצמם", "עצמן", "עצמנו", "פה", "רק", "שוב", "שוב", "של", "שלה", "שלהם", "שלהן", "שלו", "שלי", "שלך", "שלכם", "שלכן", "שלנו", "שם", "תהיה", "תחת"],
				"ignore_case" : true,
				"query_mode" : true
			}
		},
		"analyzer" : {			
			"hebrew_index" : {
				"type" : "custom",
				"tokenizer" : "whitespace",
				"char_filter" : ["html_strip"],
				"filter" : ["lowercase", "english_stemmer", "hebrew_common_grams_index"]
			},
			"hebrew" : {
				"type" : "custom",
				"tokenizer" : "whitespace",
				"char_filter" : ["html_strip"],
				"filter" : ["lowercase", "english_stemmer", "hebrew_common_grams_query"]
			},
			"default_search" : {
				"type" : "hebrew"
			},
			"default" : {
				"type" : "hebrew"
			}
		}
	}
}

but when I run it I get the following error:

[2015-07-15 10:26:53,389][DEBUG][action.admin.indices.create] [Citizen V] [fts-hebrew] failed to create
org.elasticsearch.indices.IndexCreationException: [fts-hebrew] failed to create index
        at org.elasticsearch.indices.IndicesService.createIndex(IndicesService.java:338)
        at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$2.execute(MetaDataCreateIndexService.java:371)
        at org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:374)
        at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPool
Executor.java:188)
        at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor
.java:158)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:744)
Caused by: org.elasticsearch.ElasticsearchIllegalArgumentException: failed to find analyzer type [hebrew] or tokenizer for [default]
        at org.elasticsearch.index.analysis.AnalysisModule.configure(AnalysisModule.java:372)
        at org.elasticsearch.common.inject.AbstractModule.configure(AbstractModule.java:60)
        at org.elasticsearch.common.inject.spi.Elements$RecordingBinder.install(Elements.java:204)
        at org.elasticsearch.common.inject.spi.Elements.getElements(Elements.java:85)
        at org.elasticsearch.common.inject.InjectorShell$Builder.build(InjectorShell.java:130)
        at org.elasticsearch.common.inject.InjectorBuilder.build(InjectorBuilder.java:99)
        at org.elasticsearch.common.inject.InjectorImpl.createChildInjector(InjectorImpl.java:131)
        at org.elasticsearch.common.inject.ModulesBuilder.createChildInjector(ModulesBuilder.java:69)
        at org.elasticsearch.indices.IndicesService.createIndex(IndicesService.java:336)
        ... 7 more
Caused by: org.elasticsearch.common.settings.NoClassSettingsException: Failed to load class setting [type] with value [hebrew]
        at org.elasticsearch.common.settings.ImmutableSettings.loadClass(ImmutableSettings.java:476)
        at org.elasticsearch.common.settings.ImmutableSettings.getAsClass(ImmutableSettings.java:464)
        at org.elasticsearch.index.analysis.AnalysisModule.configure(AnalysisModule.java:356)
        ... 15 more
Caused by: java.lang.ClassNotFoundException: org.elasticsearch.index.analysis.hebrew.HebrewAnalyzerProvider
        at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at org.elasticsearch.common.settings.ImmutableSettings.loadClass(ImmutableSettings.java:474)

What's wrong with this setting and what is the org.elasticsearch.index.analysis.hebrew.HebrewAnalyzerProvider class that cannot be found?

Thanks!


#2

The above post has been submitted a month ago - can please someone from Elastic answer it?


(David Pilato) #3

I think you need to try something like:

"default" : {
      "type" : "custom",
      "tokenizer" : "whitespace",
      "char_filter" : ["html_strip"],
      "filter" : ["lowercase", "english_stemmer", "hebrew_common_grams_query"]
}

Same for default_search but it does not really make sense to set it here as it's already defined by default.


#4

Thank you, David, this works!
I was assuming that I could name a new analyzer and use its name in defining "default" but I guess that was a mistake.


(system) #5