###############################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
###############################################################################
####
# OFBiz Product Search Settings
####

# Assign a weight to each product keyword source during indexing/keywork inuduction
index.weight.Product.productId=1
index.weight.Product.productName=1
index.weight.Product.internalName=1
index.weight.Product.brandName=1
index.weight.Product.description=1
index.weight.Product.longDescription=1

index.weight.ProductFeatureAndAppl.description=1
index.weight.ProductFeatureAndAppl.abbrev=1
index.weight.ProductFeatureAndAppl.idCode=1

index.weight.ProductAttribute.attrName=0
index.weight.ProductAttribute.attrValue=1

index.weight.GoodIdentification.idValue=1
index.weight.Variant.Product.productId=1

index.include.ProductContentTypes=PRODUCT_NAME,DESCRIPTION,LONG_DESCRIPTION,INGREDIENTS,WARNINGS,DIRECTIONS
index.weight.ProductContent.PRODUCT_NAME=1
index.weight.ProductContent.DESCRIPTION=1
index.weight.ProductContent.LONG_DESCRIPTION=1
index.weight.ProductContent.INGREDIENTS=1
index.weight.ProductContent.WARNINGS=1
index.weight.ProductContent.DIRECTIONS=1

# should we index variant products or products that are discontinued for sale?
index.ignore.variants=false
index.ignore.discontinued.sales=false
index.delete.on_index=false

# a set of productFeatureTypeIds to not include when attaching features to groups for categories from product feature sets
# see the attachProductFeaturesToCategory service for more details
# both of the following are comma delimited lists
attach.feature.type.exclude=BILLING_FEATURE,GIFT_WRAP
# if this (the include property) is empty all types will be included, if it contains anything only those types will be included
attach.feature.type.include=

# The product keyword will not create when word's length more than keyword.max.length
product.keyword.max.length = 15
