###############################################################################
# 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 General Keyword Search Settings
####

# The stop word bags contain words to be removed from search keyword list
# These should be colon separated and the list should start and end with colons
# The words should all be lower case
# The .or is for OR searches and the .and for AND searches
stop.word.bag.or=:the:and:or:not:if:is:it:of:to:a:as:at:in:into:on:onto:so:but:me:you:your:yes:no:this:that:there:their:because:for:while:with:without:get:put:have:has:do:does:same:different:use:using:
stop.word.bag.and=:the:and:or:not:if:is:it:of:to:a:as:at:in:into:on:onto:so:but:me:you:your:yes:no:this:that:there:their:because:for:while:with:without:get:put:have:has:do:does:same:different:use:using:

# The stem bag is used to remove suffixes from words passed in the search string and found while indexing
# IF the remove.stems properties is true
remove.stems=true
stem.bag=:s:ies:y:

# Characters that should be used as token separators when pulling out keywords
index.keyword.separators=;: ,.!?\t\"\'\r\n\\/()[]{}*%<>-+_
