Обновление сопоставления с использованием шаблона дляasticsearch и mapping.json для графического ПО отклонено - PullRequest
0 голосов
/ 16 мая 2019

Я использую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

Заранее спасибо.

С уважением Юнес

Кто-нибудь знает, как я могу решить эту проблему

...