docs: protected void initSearchSettings(Element root, CmsXmlContentDefinition contentDefinition) throws CmsXmlException {
  
          String containerPageOnly = root.attributeValue(APPINFO_ATTR_CONTAINER_PAGE_ONLY);
          if (!CmsStringUtil.isEmpty(containerPageOnly)) {
              m_containerPageOnly = Boolean.valueOf(containerPageOnly).booleanValue();
          }
          Iterator<Element> i = CmsXmlGenericWrapper.elementIterator(root, APPINFO_SEARCHSETTING);
          while (i.hasNext()) {
              Element element = i.next();
              String elementName = element.attributeValue(APPINFO_ATTR_ELEMENT);
              String searchContent = element.attributeValue(APPINFO_ATTR_SEARCHCONTENT);
              boolean include = (CmsStringUtil.isEmpty(searchContent)) || (Boolean.valueOf(searchContent).booleanValue());
              if (elementName != null) {
                  addSearchSetting(contentDefinition, elementName, Boolean.valueOf(include));
              }
              Iterator<Element> it = CmsXmlGenericWrapper.elementIterator(element, APPINFO_SOLR_FIELD);
              Element solrElement;
              while (it.hasNext()) {
                  solrElement = it.next();
  
                  String localeNames = solrElement.attributeValue(APPINFO_ATTR_LOCALE);
                  boolean localized = true;
                  if ((localeNames != null)
                      && (localeNames.equals("none") || localeNames.equals("null") || localeNames.trim().equals(""))) {
                      localized = false;
                  }
                  List<Locale> locales = OpenCms.getLocaleManager().getAvailableLocales(localeNames);
                  if (localized && ((locales == null) || locales.isEmpty())) {
                      locales = OpenCms.getLocaleManager().getAvailableLocales();
                  } else if (locales.isEmpty()) {
                      locales.add(CmsLocaleManager.getDefaultLocale());
                  }
                  for (Locale locale : locales) {
                      String targetField = solrElement.attributeValue(APPINFO_ATTR_TARGET_FIELD);
                      if (localized) {
                          targetField = targetField + "_" + locale.toString();
                      }
                      String sourceField = solrElement.attributeValue(APPINFO_ATTR_SOURCE_FIELD);
                      if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(sourceField)) {
                          int lastUnderScore = sourceField.lastIndexOf("_");
                          if (lastUnderScore > 0) {
                              sourceField = sourceField.substring(lastUnderScore);
                          }
                          targetField += sourceField;
                      }
  
                      String copyFieldNames = solrElement.attributeValue(APPINFO_ATTR_COPY_FIELDS, "");
                      List<String> copyFields = CmsStringUtil.splitAsList(copyFieldNames, ',');
                      String defaultValue = solrElement.attributeValue(APPINFO_ATTR_DEFAULT);
                      CmsSolrField field = new CmsSolrField(targetField, copyFields, locale, defaultValue);
  
                      // create the field mappings for this element
                      Iterator<Element> ite = CmsXmlGenericWrapper.elementIterator(solrElement, APPINFO_ATTR_MAPPING);
                      while (ite.hasNext()) {
                          Element mappingElement = ite.next();
                          field.addMapping(createSearchFieldMapping(contentDefinition, mappingElement, locale));
                      }
  
                      // if no mapping was defined yet, create a mapping for the element itself
                      if ((field.getMappings() == null) || field.getMappings().isEmpty()) {
                          String param = locale.toString() + "|" + elementName;
                          CmsSearchFieldMapping map = new CmsSearchFieldMapping(CmsSearchFieldMappingType.ITEM, param);
                          field.addMapping(map);
                      }
                      Set<I_CmsXmlContentHandler.MappingType> mappingTypes = parseSearchMappingTypes(solrElement);
                      for (I_CmsXmlContentHandler.MappingType type : mappingTypes) {
                          addSearchField(contentDefinition, field, type);
                      }
                  }
              }
          }
      }