Упрощенный поиск 6.4 Создание индекса - PullRequest
0 голосов
/ 09 октября 2018

Я запускаю версию ES 6.4 на моем компьютере с Windows.Сам по себе ES работает нормально, но при создании индекса он выдает ошибку.Файл сопоставления, который я использовал, приведен ниже: -

{
  "mappings": {
    "household_customer": {
      "properties": {
        "phoneNumber": {
          "type": "string",
          "index": "analyzed",
          "analyzer": "comma_analyzer"
        },
        "householdId": {
          "type": "string",
          "index": "not_analyzed"
        },
        "householdType": {
          "type": "string",
          "index": "not_analyzed"
        },
        "householdEligible": {
          "type": "string",
          "index": "not_analyzed"
        },
        "householdName": {
          "type": "string",
          "index": "not_analyzed"
        },
        "customerId": {
          "type": "string",
          "index": "not_analyzed"
        },
        "customerType": {
          "type": "string",
          "index": "not_analyzed"
        },
        "name": {
          "type": "string",
          "index": "not_analyzed"
        },
        "postalCode": {
          "type": "string",
          "index": "not_analyzed"
        },
        "houseNumber": {
          "type": "string",
          "index": "not_analyzed"
        },
        "houseNumberAddition": {
          "type": "string",
          "index": "not_analyzed"
        },
        "kvk": {
          "type": "string",
          "index": "not_analyzed"
        },
        "iban": {
          "type": "string",
          "index": "not_analyzed"
        },
        "benefitAssigned": {
          "type": "boolean"
        },
        "benefitName": {
          "type": "string",
          "index": "not_analyzed"
        },
        "benefitStatus": {
          "type": "string",
          "index": "not_analyzed"
        },
        "benefitStatusDate": {
          "type": "string",
          "index": "not_analyzed"
        },
        "hasFixed": {
          "type": "boolean"
        },
        "isFixedEligible": {
          "type": "boolean"
        },
        "hasCable": {
          "type": "boolean"
        },
        "isCableEligible": {
          "type": "boolean"
        },
        "hasInternet": {
          "type": "boolean"
        },
        "isInternetEligible": {
          "type": "boolean"
        },
        "hasDigitalTV": {
          "type": "boolean"
        },
        "isDigitalTVEligible": {
          "type": "boolean"
        },
        "eligible": {
          "type": "string",
          "index": "not_analyzed"
        },
        "householdCustomerKey": {
          "type": "string",
          "index": "not_analyzed"
        },
        "activeInd": {
          "type": "string",
          "index": "not_analyzed"
        },
        "blacklistInd": {
          "type": "boolean"
        },
        "blacklistCriteria": {
          "type": "string",
          "index": "not_analyzed"
        }
      }
    },
     "settings": {
    "analysis": {
      "analyzer": {
        "comma_analyzer": {
          "tokenizer": "comma_tokenizer"
        }
      },
      "tokenizer": {
        "comma_tokenizer": {
          "type": "pattern",
          "pattern": ","
        }
      }
    }
}
}
}

Используемая команда: - http://localhost:9200/household_customer ..... Я выполнил команду через почтальона

Ошибка: -

{
    "error": {
        "root_cause": [
            {
                "type": "mapper_parsing_exception",
                "reason": "Root mapping definition has unsupported parameters:  [analysis : {analyzer={comma_analyzer={tokenizer=comma_tokenizer}}, tokenizer={comma_tokenizer={pattern=,, type=pattern}}}]"
            }
        ],
        "type": "mapper_parsing_exception",
        "reason": "Failed to parse mapping [settings]: Root mapping definition has unsupported parameters:  [analysis : {analyzer={comma_analyzer={tokenizer=comma_tokenizer}}, tokenizer={comma_tokenizer={pattern=,, type=pattern}}}]",
        "caused_by": {
            "type": "mapper_parsing_exception",
            "reason": "Root mapping definition has unsupported parameters:  [analysis : {analyzer={comma_analyzer={tokenizer=comma_tokenizer}}, tokenizer={comma_tokenizer={pattern=,, type=pattern}}}]"
        }
    },
    "status": 400
}

Подобный вид создания индекса работает в ES2.x, но не работает для ES 6.4

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Есть пара вещей, которые необходимо обновить.Как уже указывалось, settings должен быть на том же уровне, что и mappings.Тип для string также изменился с более новыми версиями Elasticsearch.Для не проанализированных строк используйте keyword, а для проанализированных строк - text.

{
  "mappings": {
    "household_customer": {
      "properties": {
        "phoneNumber": {
          "type": "text",
          "analyzer": "comma_analyzer"
        },
        "householdId": {
          "type": "keyword"
        },
        "householdType": {
          "type": "keyword"
        },
        "householdEligible": {
          "type": "keyword"
        },
        "householdName": {
          "type": "keyword"
        },
        "customerId": {
          "type": "keyword"
        },
        "customerType": {
          "type": "keyword"
        },
        "name": {
          "type": "keyword"
        },
        "postalCode": {
          "type": "keyword"
        },
        "houseNumber": {
          "type": "keyword"
        },
        "houseNumberAddition": {
          "type": "keyword"
        },
        "kvk": {
          "type": "keyword"
        },
        "iban": {
          "type": "keyword"
        },
        "benefitAssigned": {
          "type": "boolean"
        },
        "benefitName": {
          "type": "keyword"
        },
        "benefitStatus": {
          "type": "keyword"
        },
        "benefitStatusDate": {
          "type": "keyword"
        },
        "hasFixed": {
          "type": "boolean"
        },
        "isFixedEligible": {
          "type": "boolean"
        },
        "hasCable": {
          "type": "boolean"
        },
        "isCableEligible": {
          "type": "boolean"
        },
        "hasInternet": {
          "type": "boolean"
        },
        "isInternetEligible": {
          "type": "boolean"
        },
        "hasDigitalTV": {
          "type": "boolean"
        },
        "isDigitalTVEligible": {
          "type": "boolean"
        },
        "eligible": {
          "type": "keyword"
        },
        "householdCustomerKey": {
          "type": "keyword"
        },
        "activeInd": {
          "type": "keyword"
        },
        "blacklistInd": {
          "type": "boolean"
        },
        "blacklistCriteria": {
          "type": "keyword"
        }
      }
    }
  },
  "settings": {
    "analysis": {
      "analyzer": {
        "comma_analyzer": {
          "tokenizer": "comma_tokenizer"
        }
      },
      "tokenizer": {
        "comma_tokenizer": {
          "type": "pattern",
          "pattern": ","
        }
      }
    }
  }
}

Кроме того, в качестве ошибок, которые вы видите, необходимо определить comma_analyzer вsettings.Вероятно, с помощью анализатора моделей.Как то так:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "comma_analyzer": {
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "pattern",
          "pattern": ","
        }
      }
    }
  }
}
0 голосов
/ 09 октября 2018

Ваш settings объект находится внутри mappings, но он должен быть на том же уровне.Попробуйте это так:

{
    "mappings": {
        "household_customer": {
            "properties": {
                "phoneNumber": {
                    "type": "string",
                    "index": "analyzed",
                    "analyzer": "comma_analyzer"
                },
                "householdId": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                (i omitted some stuff here...)
                "blacklistCriteria": {
                    "type": "string",
                    "index": "not_analyzed"
                }
            }
        }
    },
    "settings": {
        "analysis": {
            "analyzer": {
                "comma_analyzer": {
                    "tokenizer": "comma_tokenizer"
                }
            },
            "tokenizer": {
                "comma_tokenizer": {
                    "type": "pattern",
                    "pattern": ","
                }
            }
        }
    }
}

Если вы создали индекс для старой версииasticsearch, точно такой же, как вы опубликовали, я твердо уверен, что он проигнорировал ваши настройки.Потому что в более ранних версиях проверок было намного меньше, и вы в принципе могли поместить практически любой объект JSON.Возможно, он даже считал это другим типом, что было возможно в более ранних версиях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...