Я используюasticsearch7 и neo4j с репликацией neo4j наasticsearch с использованием плагина для графического ПО. Все идет нормально. Также я использую шаблон для упругого поиска, чтобы определить конкретные сопоставления, такие как токенизатор и анализатор, чтобы включить автозаполнение поиска поверх эластичного поиска.
Шаблон выглядит так:
`PUT _template/template_neo4j
{
"index_patterns": ["neo4j*"],
"settings":
{
"number_of_shards": 1,
"analysis":
{
"filter":
{
"nGram_filter":
{
"type": "nGram",
"min_gram": 2,
"max_gram": 3,
"token_chars":
[
"letter",
"digit",
"punctuation",
"symbol"
]
}
},
"analyzer":
{
"nGram_analyzer":
{
"type": "custom",
"tokenizer": "whitespace",
"filter":
[
"lowercase",
"asciifolding",
"nGram_filter"
]
},
"whitespace_analyzer":
{
"type": "custom",
"tokenizer": "whitespace",
"filter":
[
"lowercase",
"asciifolding"
]
}
}
}
},
"mappings":
{
"dynamic_templates":
[
{
"string_fields":
{
"match":"*",
"match_mapping_type":"string",
"mapping":
{
"type":"text",
"analyzer":"nGram_analyzer"
}
}
}
],
"dynamic":true
}
}`
Я использую динамический шаблон для включения данного nGram_analyzer для всех условий типа string.
Кроме того, я использую следующие mapping.json :
{
"defaults": {
"key_property": "uuid",
"nodes_index": "neo4j-index-node",
"relationships_index": "neo4j-index-relationship",
"include_remaining_properties": false,
"exclude_empty_properties": true
},
"node_mappings": [
{
"condition": "hasLabel('GlobalBusiness')",
"type": "globalbsuiness",
"properties": {
"parentBusiness": "getProperty('BusinessName')",
"subGlobalFirm": "query('MATCH (n) WHERE id(n) = {id} MATCH (n:GlobalBusiness)-[:HAS_SUB_GLOBAL_FIRM]->(f:GlobalBusiness) RETURN collect(f.BusinessName) AS value')"
}
}
],
"relationship_mappings": [
{
"condition": "isType('HAS_SUB_GLOBAL_FIRM')",
"type": "globalFirm"
}
]
}`
при попытке запустить базу данных neo4j / индексировать график возникает следующая ошибка:
`[2019-05-15T11:08:58,663][DEBUG][o.e.a.a.i.m.p.TransportPutMappingAction] [DE-20HEPF0XGV48] failed to put mappings on indices [[[neo4j-index-node/AAyW79tDTTebihkDl79kag]]], type [globalbsuiness]
java.lang.IllegalArgumentException: Rejecting mapping update to [neo4j-index-node] as the final mapping would have more than 1 type: [_doc, globalbsuiness]
at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:449) ~[elasticsearch-7.0.0.jar:7.0.0]
at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:398) ~[elasticsearch-7.0.0.jar:7.0.0]
at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:331) ~[elasticsearch-7.0.0.jar:7.0.0]
at org.elasticsearch.cluster.metadata.MetaDataMappingService$PutMappingExecutor.applyRequest(MetaDataMappingService.java:315) ~[elasticsearch-7.0.0.jar:7.0.0]
at org.elasticsearch.cluster.metadata.MetaDataMappingService$PutMappingExecutor.execute(MetaDataMappingService.java:238) ~[elasticsearch-7.0.0.jar:7.0.0]
at org.elasticsearch.cluster.service.MasterService.executeTasks(MasterService.java:687) ~[elasticsearch-7.0.0.jar:7.0.0]
at org.elasticsearch.cluster.service.MasterService.calculateTaskOutputs(MasterService.java:310) ~[elasticsearch-7.0.0.jar:7.0.0]
at org.elasticsearch.cluster.service.MasterService.runTasks(MasterService.java:210) [elasticsearch-7.0.0.jar:7.0.0]
at org.elasticsearch.cluster.service.MasterService$Batcher.run(MasterService.java:142) [elasticsearch-7.0.0.jar:7.0.0]
at org.elasticsearch.cluster.service.TaskBatcher.runIfNotProcessed(TaskBatcher.java:150) [elasticsearch-7.0.0.jar:7.0.0]
at org.elasticsearch.cluster.service.TaskBatcher$BatchedTask.run(TaskBatcher.java:188) [elasticsearch-7.0.0.jar:7.0.0]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:681) [elasticsearch-7.0.0.jar:7.0.0]
at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:252) [elasticsearch-7.0.0.jar:7.0.0]
at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:215) [elasticsearch-7.0.0.jar:7.0.0]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:835) [?:?]`
Полагаю, проблема возникла, потому что шаблон индекса по умолчанию добавляет свой собственный тип ко всем терминам, который _doc . При запуске indexsearch получает другой тип, который является globalbusiness , который приходит из mapping.json Поскольку существует два типа, упругий поиск отклоняет отображение, полученное из mapping.json.
Мои вопросы:
1. Есть ли у кого-нибудь идеи, как я могу решить эту проблему
2. Можно ли определить отображение по умолчанию для anaylzer, tokenizer .. в mapping.json или для ссылки на шаблон.
PS: я использую следующие плагины:
graphaware-Neo4j к elasticsearch-3.5.4.53.11.jar
graphaware-сервер-сообщества все-3.5.4.53.jar
graphaware-UUID-3.5.4.53.17.jar
с эластичным поиском 7 и neo4j 3.5.2
Настройки в neo4j для графического ПО:
dbms.unmanaged_extension_classes=com.graphaware.server=/graphaware
com.graphaware.runtime.enabled=true
com.graphaware.module.UIDM.1=com.graphaware.module.uuid.UuidBootstrapper
com.graphaware.module.UIDM.uuidIndex=uuidIndex
com.graphaware.module.UIDM.uuidProperty=uuid
com.graphaware.module.UIDM.relationship=true
com.graphaware.module.UIDM.initializeUntil=0
com.graphaware.module.UIDM.node=hasLabel('GlobalBusiness')
com.graphaware.module.ES.2=com.graphaware.module.es.ElasticSearchModuleBootstrapper
com.graphaware.module.ES.uri=localhost
com.graphaware.module.ES.port=9200
com.graphaware.module.ES.protocol=http
com.graphaware.module.ES.keyProperty=uuid
com.graphaware.module.ES.retryOnError=false
com.graphaware.module.ES.queueSize=10000
com.graphaware.module.ES.reindexBatchSize=2000
com.graphaware.module.ES.node=hasLabel('GlobalBusiness')
com.graphaware.module.ES.relationship=(true)
com.graphaware.module.ES.bulk=true
com.graphaware.module.ES.initializeUntil=2222222222222
com.graphaware.module.ES.mapping=com.graphaware.module.es.mapping.JsonFileMapping
com.graphaware.module.ES.file=mapping.json
Заранее спасибо.
С уважением
Юнес
Кто-нибудь знает, как я могу решить эту проблему