Elasticsearch: Fehler beim Versuch, einen absoluten Pfad für die Datei mit Synonymen/Stoppwörtern zu definieren.

Erstellt am 8. März 2016  ·  3Kommentare  ·  Quelle: elastic/elasticsearch

Dies ist der Fehler, den ich bekomme: reason=access denied ("java.io.FilePermission" "E:\elasticsearch\synonyms\synonyms.txt" "read")

Nun, ich weiß, dass die Nachricht wirklich spezifisch für das Problem ist, es gibt nur ein Problem ... dass Ordner und Datei buchstäblich keine Sicherheitsbeschränkungen haben, ich öffne die Dateiberechtigungen für alle und erhalte immer noch den gleichen Fehler.

Ist das ein Fehler oder was mache ich hier falsch? Uh

Dies ist die Anfrage, die ich sende

{  
    "settings":{ 
        "analysis":{  
            "analyzer":{  
                "standard":{  
                    "tokenizer":"standard",
                    "filter":[  
                        "lowercase",
                        "asciifolding",
                        "standard",
                        "synonyms"
                    ],
                    "type":"custom"
                }
            },
            "filter":{  
                "synonyms":{  
                    "synonyms_path":"E:\\elasticsearch\\synonyms\\synonyms.txt",
                    "ignore_case":true,
                    "type":"synonym"
                }
            }
        }
    }
}

Ich verwende hier übrigens Windows Server 2012
Dort haben Sie jetzt die Dateiberechtigungseinstellungen für die Datei.
screen shot 2016-03-07 at 9 27 29 pm

Meine ES-Version ist 2.2.0
JVM-Version: 1.8.0_65
Betriebssystemversion: Windows Server 2012

Außerdem haben Sie hier die Protokollinformationen, falls Sie sie nützlich fanden:

[2016-03-07 21:22:16,030][DEBUG][action.admin.indices.create] [node_name] [index_name] failed to create
[index_name] IndexCreationException[failed to create index]; nested: AccessControlException[access denied ("java.io.FilePermission" "E:\elasticsearch\synonyms\synonyms.txt" "read")];
at org.elasticsearch.indices.IndicesService.createIndex(IndicesService.java:360)
at org.elasticsearch.cluster.metadata.MetaDataCreateIndexService$1.execute(MetaDataCreateIndexService.java:309)
at org.elasticsearch.cluster.ClusterStateUpdateTask.execute(ClusterStateUpdateTask.java:45)
at org.elasticsearch.cluster.service.InternalClusterService.runTasksForExecutor(InternalClusterService.java:458)
at org.elasticsearch.cluster.service.InternalClusterService$UpdateTask.run(InternalClusterService.java:762)
at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:231)
at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:194)
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:745)
Caused by: java.security.AccessControlException: access denied ("java.io.FilePermission" "E:\elasticsearch\synonyms\synonyms.txt" "read")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472)
at java.security.AccessController.checkPermission(AccessController.java:884)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
at java.io.File.isDirectory(File.java:844)
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:82)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
at java.net.URL.openStream(URL.java:1038)
at org.elasticsearch.common.io.FileSystemUtils.newBufferedReader(FileSystemUtils.java:161)
at org.elasticsearch.index.analysis.Analysis.getReaderFromFile(Analysis.java:285)
at org.elasticsearch.index.analysis.SynonymTokenFilterFactory.<init>(SynonymTokenFilterFactory.java:64)
at sun.reflect.GeneratedConstructorAccessor68.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at org.elasticsearch.common.inject.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:50)
at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.java:86)
at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:104)
at org.elasticsearch.common.inject.FactoryProxy.get(FactoryProxy.java:54)
at org.elasticsearch.common.inject.InjectorImpl$5$1.call(InjectorImpl.java:828)
at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:887)
at org.elasticsearch.common.inject.InjectorImpl$5.get(InjectorImpl.java:823)
at org.elasticsearch.common.inject.assistedinject.FactoryProvider2.invoke(FactoryProvider2.java:236)
at com.sun.proxy.$Proxy14.create(Unknown Source)
at org.elasticsearch.index.analysis.AnalysisService.<init>(AnalysisService.java:161)
at org.elasticsearch.index.analysis.AnalysisService.<init>(AnalysisService.java:66)
at sun.reflect.GeneratedConstructorAccessor30.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at org.elasticsearch.common.inject.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:50)
at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.java:86)
at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:104)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:47)
at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:887)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:43)
at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.java:59)
at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:46)
at org.elasticsearch.common.inject.SingleParameterInjector.inject(SingleParameterInjector.java:42)
at org.elasticsearch.common.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:66)
at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.java:85)
at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:104)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:47)
at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:887)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:43)
at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.java:59)
at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:46)
at org.elasticsearch.common.inject.SingleParameterInjector.inject(SingleParameterInjector.java:42)
at org.elasticsearch.common.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:66)
at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.java:85)
at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:104)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:47)
at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:887)
at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:43)
at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.java:59)
at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:46)
at org.elasticsearch.common.inject.InjectorBuilder$1.call(InjectorBuilder.java:201)
at org.elasticsearch.common.inject.InjectorBuilder$1.call(InjectorBuilder.java:193)
at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:880)
at org.elasticsearch.common.inject.InjectorBuilder.loadEagerSingletons(InjectorBuilder.java:193)
at org.elasticsearch.common.inject.InjectorBuilder.injectDynamically(InjectorBuilder.java:175)
at org.elasticsearch.common.inject.InjectorBuilder.build(InjectorBuilder.java:110)
at org.elasticsearch.common.inject.InjectorImpl.createChildInjector(InjectorImpl.java:159)
at org.elasticsearch.common.inject.ModulesBuilder.createChildInjector(ModulesBuilder.java:55)
at org.elasticsearch.indices.IndicesService.createIndex(IndicesService.java:358)
... 9 more

Hilfreichster Kommentar

Dies ist kein Berechtigungsproblem, sondern eine AccessControlException. Elasticsearch 2.0+ läuft mit dem Java-Sicherheitsmanager und schränkt ein, welche Dateien die Anwendung lesen darf. Konfigurationsdateien wie Synonyme sollten sich unterhalb des Elasticsearch-Konfigurationsverzeichnisses befinden, das für Lesezugriff konfiguriert ist.

Alle 3 Kommentare

Dies ist kein Berechtigungsproblem, sondern eine AccessControlException. Elasticsearch 2.0+ läuft mit dem Java-Sicherheitsmanager und schränkt ein, welche Dateien die Anwendung lesen darf. Konfigurationsdateien wie Synonyme sollten sich unterhalb des Elasticsearch-Konfigurationsverzeichnisses befinden, das für Lesezugriff konfiguriert ist.

Sie meinen also, ich muss die Synonymdatei in das Konfigurationsverzeichnis jedes Knotens kopieren?

Die Synonymdatei benötigen Sie in jedem Fall auf jedem Knoten. Aber ja, es wird empfohlen, es in das Konfigurationsverzeichnis zu legen. Andernfalls können Sie die Richtlinie mit normalen Java-Mechanismen hinzufügen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen