###############################################################################
# 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/keyword induction
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
