Search in sources :

Example 6 with TokenHolder

use of org.neo4j.token.api.TokenHolder in project neo4j by neo4j.

the class FulltextIndexProvider method validateIndexRef.

private void validateIndexRef(IndexRef<?> ref) {
    String providerName = getProviderDescriptor().name();
    if (ref.getIndexType() != IndexType.FULLTEXT) {
        throw new IllegalArgumentException("The '" + providerName + "' index provider only supports FULLTEXT index types: " + ref);
    }
    if (!ref.schema().isFulltextSchemaDescriptor()) {
        throw new IllegalArgumentException("The " + ref.schema() + " index schema is not a full-text index schema, " + "which it is required to be for the '" + providerName + "' index provider to be able to create an index.");
    }
    Value value = ref.getIndexConfig().get(ANALYZER);
    if (value != null) {
        if (value.valueGroup() == ValueGroup.TEXT) {
            String analyzerName = ((TextValue) value).stringValue();
            Optional<AnalyzerProvider> analyzerProvider = listAvailableAnalyzers().filter(analyzer -> analyzer.getName().equals(analyzerName)).findFirst();
            if (analyzerProvider.isPresent()) {
                // Verify that the analyzer provider works.
                Analyzer analyzer = analyzerProvider.get().createAnalyzer();
                Objects.requireNonNull(analyzer, "The '" + analyzerName + "' analyzer returned a 'null' analyzer.");
            } else {
                throw new IllegalArgumentException("No such full-text analyzer: '" + analyzerName + "'.");
            }
        } else {
            throw new IllegalArgumentException("Wrong index setting value type for fulltext analyzer: '" + value + "'.");
        }
    }
    TokenHolder propertyKeyTokens = tokenHolders.propertyKeyTokens();
    for (int propertyId : ref.schema().getPropertyIds()) {
        try {
            NamedToken token = propertyKeyTokens.getTokenById(propertyId);
            if (token.name().equals(LuceneFulltextDocumentStructure.FIELD_ENTITY_ID)) {
                throw new IllegalArgumentException("Unable to index the property, the name is reserved for internal use " + LuceneFulltextDocumentStructure.FIELD_ENTITY_ID);
            }
        } catch (TokenNotFoundException e) {
            throw new IllegalArgumentException("Schema references non-existing property key token id: " + propertyId + ".", e);
        }
    }
}
Also used : AnalyzerProvider(org.neo4j.graphdb.schema.AnalyzerProvider) DroppableLuceneIndex(org.neo4j.kernel.api.impl.index.DroppableLuceneIndex) SchemaIndex(org.neo4j.kernel.api.impl.schema.SchemaIndex) Log(org.neo4j.logging.Log) CursorContext(org.neo4j.io.pagecache.context.CursorContext) TokenNameLookup(org.neo4j.common.TokenNameLookup) IndexType(org.neo4j.internal.schema.IndexType) IndexPopulator(org.neo4j.kernel.api.index.IndexPopulator) Config(org.neo4j.configuration.Config) DatabaseIndex(org.neo4j.kernel.api.impl.index.DatabaseIndex) Value(org.neo4j.values.storable.Value) IndexSamplingConfig(org.neo4j.kernel.impl.api.index.IndexSamplingConfig) StringUtils(org.apache.commons.lang3.StringUtils) FulltextIndexSettings.createAnalyzer(org.neo4j.kernel.api.impl.fulltext.FulltextIndexSettings.createAnalyzer) LuceneSchemaIndexBuilder(org.neo4j.kernel.api.impl.schema.LuceneSchemaIndexBuilder) DroppableIndex(org.neo4j.kernel.api.impl.index.DroppableIndex) IndexProviderDescriptor(org.neo4j.internal.schema.IndexProviderDescriptor) Exceptions(org.neo4j.internal.helpers.Exceptions) PageCache(org.neo4j.io.pagecache.PageCache) StringUtils.defaultIfEmpty(org.apache.commons.lang3.StringUtils.defaultIfEmpty) IndexStorageFactory(org.neo4j.kernel.api.impl.index.storage.IndexStorageFactory) PartitionedIndexStorage(org.neo4j.kernel.api.impl.index.storage.PartitionedIndexStorage) TextValue(org.neo4j.values.storable.TextValue) MinimalIndexAccessor(org.neo4j.kernel.api.index.MinimalIndexAccessor) Services(org.neo4j.service.Services) Objects(java.util.Objects) Stream(java.util.stream.Stream) IndexPrototype(org.neo4j.internal.schema.IndexPrototype) Optional(java.util.Optional) IndexDescriptor(org.neo4j.internal.schema.IndexDescriptor) DatabaseReadOnlyChecker(org.neo4j.configuration.helpers.DatabaseReadOnlyChecker) DirectoryFactory(org.neo4j.kernel.api.impl.index.storage.DirectoryFactory) IndexCapability(org.neo4j.internal.schema.IndexCapability) FulltextSettings(org.neo4j.configuration.FulltextSettings) InternalIndexState(org.neo4j.internal.kernel.api.InternalIndexState) ANALYZER(org.neo4j.kernel.api.impl.fulltext.FulltextIndexSettingsKeys.ANALYZER) LuceneMinimalIndexAccessor(org.neo4j.kernel.api.impl.index.LuceneMinimalIndexAccessor) IndexAccessor(org.neo4j.kernel.api.index.IndexAccessor) ReadOnlyIndexPartitionFactory(org.neo4j.kernel.api.impl.index.partition.ReadOnlyIndexPartitionFactory) IndexProvider(org.neo4j.kernel.api.index.IndexProvider) ByteBufferFactory(org.neo4j.io.memory.ByteBufferFactory) Values(org.neo4j.values.storable.Values) TokenHolder(org.neo4j.token.api.TokenHolder) JobScheduler(org.neo4j.scheduler.JobScheduler) IndexConfig(org.neo4j.internal.schema.IndexConfig) MemoryTracker(org.neo4j.memory.MemoryTracker) FulltextIndexSettings.isEventuallyConsistent(org.neo4j.kernel.api.impl.fulltext.FulltextIndexSettings.isEventuallyConsistent) Analyzer(org.apache.lucene.analysis.Analyzer) IOException(java.io.IOException) IndexDirectoryStructure(org.neo4j.kernel.api.index.IndexDirectoryStructure) StoreMigrationParticipant(org.neo4j.storageengine.migration.StoreMigrationParticipant) StorageEngineFactory(org.neo4j.storageengine.api.StorageEngineFactory) TokenHolders(org.neo4j.token.TokenHolders) TokenNotFoundException(org.neo4j.token.api.TokenNotFoundException) FulltextIndexSettings.createPropertyNames(org.neo4j.kernel.api.impl.fulltext.FulltextIndexSettings.createPropertyNames) NamedToken(org.neo4j.token.api.NamedToken) ValueGroup(org.neo4j.values.storable.ValueGroup) SchemaIndexMigrator(org.neo4j.storageengine.migration.SchemaIndexMigrator) IndexRef(org.neo4j.internal.schema.IndexRef) FileSystemAbstraction(org.neo4j.io.fs.FileSystemAbstraction) AnalyzerProvider(org.neo4j.graphdb.schema.AnalyzerProvider) TextValue(org.neo4j.values.storable.TextValue) Value(org.neo4j.values.storable.Value) TextValue(org.neo4j.values.storable.TextValue) TokenHolder(org.neo4j.token.api.TokenHolder) FulltextIndexSettings.createAnalyzer(org.neo4j.kernel.api.impl.fulltext.FulltextIndexSettings.createAnalyzer) Analyzer(org.apache.lucene.analysis.Analyzer) NamedToken(org.neo4j.token.api.NamedToken) TokenNotFoundException(org.neo4j.token.api.TokenNotFoundException)

Aggregations

TokenHolder (org.neo4j.token.api.TokenHolder)6 TokenHolders (org.neo4j.token.TokenHolders)5 DelegatingTokenHolder (org.neo4j.token.DelegatingTokenHolder)4 IOException (java.io.IOException)2 Test (org.junit.jupiter.api.Test)2 IndexDescriptor (org.neo4j.internal.schema.IndexDescriptor)2 PageCache (org.neo4j.io.pagecache.PageCache)2 NamedToken (org.neo4j.token.api.NamedToken)2 System.currentTimeMillis (java.lang.System.currentTimeMillis)1 StandardCharsets (java.nio.charset.StandardCharsets)1 Iterator (java.util.Iterator)1 Map (java.util.Map)1 Objects (java.util.Objects)1 Optional (java.util.Optional)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 BiConsumer (java.util.function.BiConsumer)1 Consumer (java.util.function.Consumer)1 Stream (java.util.stream.Stream)1 StringUtils (org.apache.commons.lang3.StringUtils)1 StringUtils.defaultIfEmpty (org.apache.commons.lang3.StringUtils.defaultIfEmpty)1